【微服务核心】Spring Boot
Spring Boot
文章目录
1. 简介
SpringBoot,开箱即用,设置合理的默认值,同时也可以根据需求进行适当的调整。遵从约定大于配置,基本不需要主动编写配置类、也不需要 XML 配置文件。
2. 开发步骤
-
创建Maven工程
-
添加依赖,使用
spring-boot-starter-parent
及spring-boot-starter-web
-
编写启动配置类
@SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class,args); } }
-
编写处理器 Controller
通过上述步骤,即可直接根据启动配置类直接启动
总结:
-
spring-boot-starter-parent
:父项目中把常见的依赖版本都声明好了 -
spring-boot-starter-web
:Starter
启动器依赖,是一系列预定义依赖项的集合,旨在简化Spring应用程序的配置和构建过程,Spring Boot提供了许多预定义的Starter,例如spring-boot-starter-web用于构建Web应用程序,spring-boot-starter-data-jpa用于使用JPA进行数据库访问,spring-boot-starter-security用于安全认证和授权等等,Spring boot 提供的全部启动器地址:
-
@SpringBootApplication
: 组合注解,功效由具体的子注解实现,含有的子注解及主要作用有:@EnableAutoConfiguration
:启用Spring Boot的自动配置机制@ComponentScan
:用于自动扫描并加载应用程序中的组件@Configuration
:将被标注的类声明为配置类。配置类可以包含Spring框架相关的配置、Bean定义,以及其他的自定义配置
3. 配置文件
默认读取,命名 application
后缀 .properties
/ .yaml
/ .yml
的配置文件,在配置文件中配置的属性可使用 @Value("${变量key}")
直接读取,集合定义用 ,
隔开不同元素
@ConfigurationProperties
:批量配置文件属性注入,指定prefix
属性会将配置文件中配置的属性按属性名注入,底层依赖于set方法
,如无set方法
将不会注入,而@Value
不受此限制
多环境配置:不同环境配置可使用 application-dev.yml
、application-uat.yml
、application-prd.yml
命名来区分,在启动时指定 spring.profiles.active
为 dev
、uat
、prd
即可。
指定活跃环境后有重叠属性则对应配置文件优先生效,无重叠属性时,application.yml
中的配置会生效。 spring.profiles.active
可同时指定多个,则对应配置文件都会生效,但一般只会按不同环境区分而只激活对应一个环境的配置文件。
配置文件中属性参考可看官方 Application Properties
,下面是其中 web 配置的 Server Properties
链接,也可点击进入参考其他属性:
常用参数:
server.port
:指定应用程序的HTTP服务器端口号,默认 8080server.servlet.context-path
:设置应用程序的上下文路径spring.resources.static-locations
:配置静态资源的位置,设置了后会覆盖默认值。默认包含classpath:/META-INF/resources/
,classpath:/resources/**
,classpath:/static/**
,classpath:/public/
4. 整合 Spring MVC 功能
基础用法如第2开发步骤所示,关于拦截器及其他功能,则还像之前一样使用,如拦截器,增加组件自定义拦截器,增加配置类,注入对应拦截器
- 自定义拦截器:
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor拦截器的preHandle方法执行....");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor拦截器的postHandle方法执行....");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor拦截器的afterCompletion方法执行....");
}
}
- 配置拦截器:
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor ;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
5. 整合 Druid 和 Mybatis
-
导入依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-3-starter</artifactId> <version>1.2.20</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.28</version> </dependency> </dependencies>
-
配置文件
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource username: root password: root url: jdbc:mysql:///database driver-class-name: com.mysql.cj.jdbc.Driver mybatis: configuration: auto-mapping-behavior: full map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl type-aliases-package: com.springboot.pojo mapper-locations: classpath:/mappers/*.xml
-
配置启动类
@MapperScan("com.springboot.mapper") // 扫描 mapper 接口 @SpringBootApplication public class SpringBootApplicationMain { public static void main(String[] args) { SpringApplication.run(SpringBootApplicationMain.class); } }
-
其他类及目录结构
@Data
public class Schedule {
private Integer id;
private String title;
private Integer age;
}
@RequestMapping("schedule")
@RestController
public class ScheduleController {
@Autowired
private ScheduleMapper scheduleMapper;
@RequestMapping("query")
public Result<List<Schedule>> query(@RequestBody(required = false) Schedule query) {
return new Result<>(scheduleMapper.selectList(query));
}
}
public interface ScheduleMapper {
List<Schedule> selectList(Schedule schedule);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.mapper.ScheduleMapper">
<select id="selectList" resultType="schedule">
select * from schedule
</select>
</mapper>
6. 使用声明式事务
引入了 spring-boot-starter-jdbc
即可直接使用
7. AOP整合配置
需引入依赖 spring-boot-starter-aop
,之后直接使用 aop 注解即可
@Aspect
@Component
@Slf4j
public class MyAdvice {
@Pointcut("execution(* com.springboot.controller.*.*(..))")
public void pointcut() {
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) {
try {
log.info("入参:{}", proceedingJoinPoint.getArgs());
Object proceed = proceedingJoinPoint.proceed();
log.info("出参:{}", proceed);
return proceed;
} catch (Throwable t) {
log.error("异常", t);
throw new RuntimeException(t);
}
}
}
8. SpringBoot项目打包和运行
在Spring Boot项目中添加spring-boot-maven-plugin
插件是为了支持将项目打包成可执行的可运行jar包。如果不添加spring-boot-maven-plugin
插件配置,使用常规的java -jar
命令来运行打包后的Spring Boot项目是无法找到应用程序的入口点,因此导致无法运行
<!-- SpringBoot应用打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
命令启动和参数说明:
java -jar [选项] [参数] <jar文件名>
-D<name>=<value>
:设置系统属性,可通过System.getProperty()
方法在程序中获取该属性值。如:java -jar -Dserver.port=8080 myapp.jar
,多参数可以-Dserver.port=8080 -Dspring.profiles.active=prd
-X
:设置JVM参数,例如内存大小、垃圾回收策略等。常用的选项包括:-Xmx<size>
:设置JVM的最大堆内存大小,例如-Xmx512m
表示设置最大堆内存为512MB-Xms<size>
:设置JVM的初始堆内存大小,例如-Xms256m
表示设置初始堆内存为256MB
-Dspring.profiles.active=<profile>
:指定Spring Boot的激活配置文件,可以通过application-<profile>.properties
或application-<profile>.yml
文件来加载相应的配置。例如:java -jar -Dspring.profiles.active=dev myapp.jar
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!