Spring Boot配置文件简介(一)
文章目录
配置类
# properties配置类中添加person的属性值
# 用于设置person类的值
person.name=张三
person.birth=2022-02-10
person.gender=女
1.使用@ConfigurationProperties注解可批量获取配置文件中的值
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private String gender;
private Boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> list;
使用@ConfigurationProperties时需要添加依赖
<!--@ConfigurationProperties 的依赖,配置文件中可自动识别对应参数-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.使用@Value可直接单个获取配置文件中的值
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
@Value("${person.name}")
private String name;
@Value("#{2*3}")
private int age;
@Value("${person.gender}")
private String gender;
}
3. @Value和@ConfigurationProperties的区别
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 单个获取 |
松散绑定 | 支持 | 不支持 |
SqEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型对接 | 支持 | 不支持 |
注:松散绑定:lastName = Last-name,即大写可以用 “-小写” 来表示
当某个业务逻辑中需要获取某个配置文件中的数值时,使用@Value
当专门写了一个JavaBean和配置文件映射时,使用@ConfigurationProperties
4. JSR303数据校验的基本使用
//通过使用注解的方式给予对象属性限制,例如不为空、手机号、邮箱、长度等
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Value("${张三}")
private String name;
@Value("#{2*3}")
private int age;
//email必须是邮箱格式才行
@Email
private String email;
@NotNull //不能为空
@IsMobile //@IsMobile是自定义校验规则,必须符合电话号码规范。见IsMobile类和IsMobileValidator类
private String mobile;
@NotNull //密码不能为空
@Length(max=32) //长度不能超过32
private String password;
}
5. 使用@PropertySource加载指定的配置文件
//指定配置文件路径为:类路径下的person.properties文件
@PropertySource(value = {"classpath:person.properties"})
@Component
//@ConfigurationProperties(prefix = "person")
@Data
public class Person {
//@Value("${person.name}")
private String name;
@Value("#{2*3}")
private int age;
//email必须是邮箱格式才行
//@Email
private String gender;
private Boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> list;
}
6.使用@ImportSource导入spring的配置文件
spring中加载配置文件的方法
#在主配置类中添加配置文件的路径,以让其生效,一般为xml格式文件
@ImportResource(value = {"classpath:beans.xml"})
@SpringBootApplication
public class PropertiesApplication {
public static void main(String[] args) {
SpringApplication.run(PropertiesApplication.class, args);
}
}
beans.xml文件内容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloService" class="com.spring.service.HelloService"></bean>
</beans>
springboot中推荐给容器中添加组件的方式:推荐全注解的方式
使用@Bean注解自动获取配置类中的信息。
/**
* @Configuration指明当前类是一个配置类,替代spring中的配置文件
*
* 配置文件中使用<bean>标签来添加组件
*/
@Configuration
public class MyAppConfig {
//将方法中的返回值添加到容器中,容器中的默认ID为方法名
@Bean
public HelloService helloService(){
System.out.println("@Bean注解生效,容器中添加组件成功!!!");
return new HelloService();
}
}
7. 配置文件占位符
# 用于设置person类的值
person.name=张三
person.birth=2022/02/10
gender-0=女
gender-1=男
#直接获取配置文件中其他属性值 $ ${person.name}
person.gender=${person.gender-0}
#也可使用${random.value}来添加随机值
person.age=${random.int}
8. Profile
1.多profile文件
主配置文件编写时,文件名命名格式为 application-{profileName}.properties
但默认使用appllication.properties的配置
2.yml的文档块模式
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod
3.激活指定profile
- 在配置文件中指定 spring.prodile.active={profileName} ,例如:=dev
- 命令行:
将项目打包后,执行命令 java -jar spring-boot-project-name.jar --spring.profiles.active=dev - 虚拟机参数:
-Dspring.profiles.active=dev
9.配置文件加载位置
spring boot启动时会扫描以下位置的application.properties或者application.yml文件作为springboot的默认配置文件。
加载顺序和优先级从高到低为:
-file:./config/
-file:./
-classpath:./config/
-classpath:./
-
SpringBoot会从这四个位置全部加载主配置文件,支持“互补配置”:高优先级的配置会覆盖低优先级的配置,但同时会加载全部的配置。
-
还可以使用spring.config.location 来改变默认的配置文件位置,但应使用命令行的形式来实现。
10. 外部配置加载顺序
- 使用命令行参数,例如: java -jar projectName.jar --server.port=8082 --server.context-path=/springboot
- 优先加载配置文件中带profile的
- 加载和优先级顺序都从jar包外到jar包内
- 具体参考官方文档
11. 自动配置原理
自动配置类需要在一定条件下才能生效,
可以通过启用 debug=true 属性,在控制台可以打印出启用、未启用的自动配置类。
注:本文是一课程总结,如有侵权,请联系删除。