1、@ConfigurationProperties和@Value:@ConfigurationProperties默认从全局配置文件中获取值
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性值 | 一个个的注入值 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定:驼峰式、下划线(_)、短横线(-)均可注入
数据校验示例:@Validated注解表示需要进行数据校验,@Email表示属性值必须是邮件格式
@Component
@Validated
@ConfigurationProperties(prefix = "person")
public class Person {
@Email
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
复杂类型封装:对象、map、数组
2、@PropertySource和@ImportResource
①@PropertySource:加载指定配置文件,可以在SpringBoot默认的两个全局配置文件之外自定义属性配置文件
@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
@ImportResource:引入Spring的xml配置文件,SpringBoot支持使用beans.xml配置文件,但不推荐使用
@ImportResource(value = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBootHelloquickApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloquickApplication.class, args);
}
}
@ImportResource注解须使用在有@Configuration注解的类上(@SpringBootApplication继承自@Configuration)
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">
</beans>
SpringBoot推荐使用@Configuration注解的配置类给容器中添加组件,SpringBoot会自动将注解有@Configuration的类视为容器配置类,并将类中使用@Bean注解的方法的视为bean的获取方法,@Bean注解的方法也可以写在@SpringBootApplication注解的主程序类中:
@Configuration
public class MyConfig {
@Bean
public Dog dog(){
return new Dog();
}
}
3、配置文件占位符
①配置文件中使用随机数:${random.value}、${random.int}、${random.long}、${random.int(10)}、${random.int[1024,65536]}
person.age=${random.value}
person.dos.age=${random.uuid}
②配置文件中获取已有的配置,若没有可以指定默认值
person.age=${random.value}
person.dos.age=${person.age:2}