SpringBoot,开箱即用,设置合理的默认值,同时也可以根据需求进行适当的调整。遵从约定大于配置,基本不需要主动编写配置类、也不需要 XML 配置文件。
创建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定义,以及其他的自定义配置默认读取,命名 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/
基础用法如第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("/**");
}
}
导入依赖
<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>
引入了 spring-boot-starter-jdbc
即可直接使用
需引入依赖 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);
}
}
}
在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