Spring Boot 的配置文件主要用于配置项目的运行参数和环境变量,常用的有 application.properties
和 application.yml
(或 application.yaml
)两种格式。
一、配置文件的作用
配置文件可以用于配置:
类型 | 举例 |
---|---|
应用基本信息 | 应用名、端口号、环境等 |
数据库 | 数据库连接信息 |
日志 | 日志级别、路径 |
缓存 | Redis、EhCache |
消息队列 | Kafka、RabbitMQ |
安全配置 | 登录认证、权限 |
自定义参数 | 可以被 @Value 或 @ConfigurationProperties 读取 |
二、文件格式
Spring Boot 支持两种配置格式:
配置项的内容一致,只是格式不一样!推荐使用yml的格式!
2-1. application.properties
示例
# 服务器端口
server.port=8081
# 应用名
spring.application.name=myapp
# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=123456
# 日志级别
logging.level.com.example.demo=DEBUG
2-2. application.yml/application.yaml
示例(推荐使用,可读性更强)
server:
port: 8081
spring:
application:
name: myapp
datasource:
url: jdbc:mysql://localhost:3306/testdb
username: root
password: 123456
logging:
level:
com.example.demo: DEBUG
2-3、配置文件的内容
配置文件的具体内容是可以在springboot的官网搜索到的:
注意:
不是所有的properties都能写的!properties是和你当前项目用到的技术有关的!
2-4、yaml配置文件,没有提示
这是因为idea不认为yaml后缀的文件是一个配置文件。
三、配置文件的位置(优先级)
若是三种配置文件同时存在:(.properties, .yml, .ymal)
优先级是:.properties > .yml > .ymal
而且这三种配置文件的内容,共存叠加,相同覆盖(根据优先级)!
Spring Boot 会自动加载以下位置的配置文件,优先级从高到低:
-
命令行参数(例如
--server.port=8088
) -
application.properties
或application.yml
(放在src/main/resources
目录下) -
外部配置(例如通过
-Dspring.config.location=xxx
指定)
四、多环境配置(Profile)
你可以为不同环境配置不同的文件,例如:
-
application-dev.yml
-
application-test.yml
-
application-prod.yml
主配置文件中指定当前环境:
spring:
profiles:
active: dev
Spring Boot 会自动加载 application-dev.yml
的配置。
五、读取配置的方式
1. 使用 @Value
@Value("${server.port}")
private int port;
2. 使用 @ConfigurationProperties
(适合绑定一组配置)
my:
app:
name: hello
version: 1.0
@Component
@ConfigurationProperties(prefix = "my.app")
public class AppConfig {
private String name;
private String version;
// getters and setters
}
六、自定义配置和获取
你也可以在配置文件中添加自定义属性,例如:
custom:
greeting: "Hello, Spring Boot!"
【注意】:
1、值前面要有空格!
2、相同层级,左对齐。
3、大小写敏感
6-1、数组或列表(List)的配置
1、YAML 格式中的数组设置
(1)、常用方式:使用 -
符号列出元素
(2)、另一种方式:用逗号分隔字符串(效果同上)
2、Properties 格式中的数组设置
用逗号分隔值(最常见方式)
my.servers=192.168.0.1,192.168.0.2,192.168.0.3
6-2、配置信息的获取
1、通过 @Value("${键名}")获取:
读取数组:
yml配置文件中的值相互引用:${属性名}
特殊字符转义:用双引号报告,才会转义!
【@Value获取配置信息的缺点】:
若是成员变量很多,每个都要加@Value会很麻烦。
2、@ConfigurationProperties(prefix = "前缀")
读取
将一组数据,封装为一个对象!这个对象要被spring识别,要加上@Component注解!
【注意】:
1、要让创建的对象被spring识别,要加上@Component!
2、application.yml / application.properties文件中的信息被修改了,并不需要重新打包、部署项目代码!
3、Environment对象
七、总结
功能 | 推荐方式 |
---|---|
单个配置读取 | @Value |
一组配置读取 | @ConfigurationProperties |
多环境切换 | 使用 spring.profiles.active |
可读性 | 建议使用 application.yml |
八、springboot整合mybatis
8-1、回顾spring整合mybatis
8-2、springboot整合mybatis
1、添加mybatis的起步依赖 + 数据库驱动依赖:
添加了mybatis的起步依赖之后,mybatis以及相关的bean会被自动添加进项目中。
项目中用到了这个父类:
这就意味着:你自动继承了 Spring Boot 官方提供的一个 版本管理中心,里面已经定义好了大量常用依赖的版本。(具体定义了哪些依赖,可以通过git上的查询到!)
Spring Boot 使用的是 Maven 的 dependencyManagement 机制,这机制允许你:
不用显式写
<version>
,只写<groupId>
和<artifactId>
,Maven 会自动使用父类定义的版本。
mysql-connector-j
可以不写版本,因为 Spring Boot 官方已经在 spring-boot-dependencies
中管理了这个依赖的版本,你可以省略 version
,Maven 会自动用 Spring Boot 推荐的版本(比如 8.0.33
)。
mybatis-spring-boot-starter
必须手动写版本?
这就不一定了。
-
如果你用的是 Spring Boot 2.x,通常不会自动管理
mybatis-spring-boot-starter
。 -
但 Spring Boot 3.x(如你写的 3.1.2)是有管理的!
2、在配置文件 application.yml中编写数据库相关信息。
8-3、编写业务代码
1、编写pojo类:
2、编写mapper接口
3、编写service接口是实现类
4、编写controller类
九、springboot整合junit
9-1、一般步骤
创建一个springboot project,默认就是导入了test依赖的:
这是因为,springboot是maven项目,maven项目是一定要执行测试操作的!
【注意】:
主要的核心类就是:@SpringBootTest,加上这个注解,这个类就是一个测试类!
9-2、测试类和引导类的位置关系
在 Spring Boot 中,测试类和引导类(@SpringBootApplication
主类)的位置关系,直接影响到 Spring 容器能否正常加载并注入依赖。
建议测试类与引导类在同一个包或其子包下,否则你必须手动指定扫描路径或配置上下文。
包名要对得上!
解决方法:手动指定引导类
十、springboot整合mybatis-plus
步骤一:使用springboot的框架,创建一个module
步骤二:添加mybatis-plus的依赖
步骤三:配置数据库相关属性
步骤四:编写dao接口,继承basemapper
【注意】:此时运行测试程序会报错:
Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
问题原因 : 更新的spring更改了factoryBean方法,导致老版本的mybatis不能兼容, 所以最新的mybatis3.0.3修复了这个问题, 然而mybatisplus中还未更新
解决方案 : 排除mybatilsplus自带的mybatils-spring,重新引入
十一、springboot整合druid
或者: