Springboot之application.properties
阅读数:164 评论数:0
跳转到新版页面分类
python/Java
正文
1、配置文件的格式
springboot可以识别两种格式的配置文件,分别是yml文件与properties文件,我们可以将application.properties文件换成application.yml,这两个文件都可以被springboot自动识别并加载,但是如果是自定义的配置文件 ,最好还是使用properties格式的文件,因为springboot中暂时还并未提供手动加载yml格式文件的功能(指注解方式)。
application.properties配置文件要被springboot自动加载,需要放置到指定的位置:src/main/resource目录下,一般自定义配置文件也位于此目录下。
2、配置文件的加载
application.properties配置文件是在springboot项目启动的时候被自动加载的,其内部的相关配置会自动覆盖springboot默认的对应设置项,所以的配置项均会保存到spring容器之中。
(1)注解加载自定义属性文件
@PropertySource("classpath:xxx.properties")
这个注解专门用来加载指定位置properties文件,通常的做法是新建一个配置类,使用@Configuration标注,再加上之前的@PropertySource("classpath:xxx.properties")注解,而类的内部并不需要任何内容,这是一个纯粹的配置加载类,由于@Configuration(底层为@Component),他会被spring的扫描器扫到,并加载到JVM,并创建Bean,而创建的时候就会执行配置文件中配置项的加载,然后就可以在Spring容器中类用@Value("${key}")的方式使用,一般将其配置在字段顶部,表示将配置项的值赋值给该字段。
(2)属性绑定JavaBean
更多的情况是将配置项与一个JavaBean绑定起来使用,这样绑定一次,就可以随时使用。
(3)@ConfigurationProperties
该注解有一个prefix属性,通过指定的前缀,绑定配置文件的配置,该注解可以放在类上,也可以放在方法上。和@Value有相同的功能,但是@ConfigurationProperties的写法更为方便。命名上可以进行下划线转驼峰。
如果将该注解作用于方法上时,想要有效的绑定配置,那么该方法需要有@Bean注解,且所属Class需要有@Configuration注解。
@Configuration
public class DruidDataSourceConfig {
/**
* DataSource 配置
* @return
*/
@ConfigurationProperties(prefix = "spring.datasource.druid.read")
@Bean(name = "readDruidDataSource")
public DataSource readDruidDataSource() {
return new DruidDataSource();
}
/**
* DataSource 配置
* @return
*/
@ConfigurationProperties(prefix = "spring.datasource.druid.write")
@Bean(name = "writeDruidDataSource")
@Primary
public DataSource writeDruidDataSource() {
return new DruidDataSource();
}
}
作用于类
@ConfigurationProperties(prefix = "spring.datasource")
@Component
public class DatasourcePro {
private String url;
private String username;
private String password;
// 配置文件中是driver-class-name, 转驼峰命名便可以绑定成
private String driverClassName;
private String type;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
(4)@EnableConfigurationProperties
如果一个类只配置了@ConfigurationProperties注解,而没有使用@Component注解将该类加入到IOC容器中,那么它就不能完成xxx.properties配置文件和Java Bean的数据绑定。
@ConfigurationProperties(prefix = "xiaomao")
public class MyConfigurationProperties {
// 省略 get、set、toString方法
private String name;
private Integer age;
private String gender;
}
// 注入到 IOC 容器中,交由 Spring 进行管理
@Service
// 该注解的作用是使 MyConfigurationProperties 这个类上标注的 @ConfigurationProperties 注解生效,并且会自动将这个类注入到 IOC 容器中
@EnableConfigurationProperties(MyConfigurationProperties.class)
public class HelloServiceImpl implements HelloService {
}