前言:不忘初心,寻找最初的编程快感!
默认配置
- 创建Spring Boot项目时,会默认在resource文件夹下创建appllication.propertities属性文件。
SpringApplication类会在对应位置检索该文件:
- 当前目录的/config子目录
- 当前目录
- classpath中的/config包
- classpath
- 实践:
- resource文件夹下创建appllication.propertities属性文件
- 创建pojo实体类:MysqlDataSource接收配置属性
- 在当前目录新建config包并创建ApplicationConfig配置类
@Configuration
//指定配置文件路径
@PropertySource("classpath:application.properties")
public class ApplicationConfig {
//注入属性
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public MysqlDataSource getDataSource(){
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
- 测试:在浏览器中输出JDBC配置类信息(重命名了下MysqlDataSource->MyDataSource)
-
YAML配置
yaml(yml)是JSON的超集,一般用于指定分层配置。SpringApplication类能够自动支持YAML,将其作为Properties属性文件的替代者。Spring提供了YamlPropertiesFactoryBean将YAML加载为Properties以及YamlMapFactoryBean将YAML加载为Map。
Yml配置文件的特征:
- 树状层级结构展示配置项
- 配置项之间如果有关系的话需要分行空两格
- 配置项如果有值的话,那么需要在:之后空一格再写配置项值;
- 多个Yml配置文件:在spring boot中是被允许的。这些配置文件的命名必须为application-*.yml,并且这些 配置文件必须要在application.yml配置文件中激活之后才可以使用。
- 如果properties和yml配置文件同时存在,那么这两类配置文件都有效,在两个配置文件中如果存在同名的配置项的话会以properties文件的为主
- 将原properties文件转换成yaml配置文件
文件配置代码如下:
server:
port: 8081
jdbc:
url: mysql://127.0.0.1:3306/springboot
driverClassName: com.mysql.jdbc.Driver
username: root
password: a753224656
多yml文件配置如下:
2. 在pom.xml中加入如下配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!--不传递依赖-->
<optional>true</optional>
</dependency>
- 在config目录下新建ApplicationProperties类,并标记注解@ConfigurationProperties;
/*
配置获取application.yml文件中的jdbc属性
*/
@ConfigurationProperties(prefix = "jdbc")
public class ApplicationProperties {
private String url;
private String driverClassName;
private String username;
private String password;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
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;
}
@Override
public String toString() {
return "MysqlDataSource{" +
"url='" + url + '\'' +
", driverClassName='" + driverClassName + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
- 新建ApplicationConfig配置类接收Properties属性;
- 使用@EnableConfigurationProperties让配置 @ConfigurationProperties 注解的类生效。
@Configuration
//指定配置文件路径
//@PropertySource("classpath:application.properties")
@EnableConfigurationProperties(ApplicationProperties.class)
public class ApplicationConfig {
@Bean
public MyDataSource getDataSource(ApplicationProperties properties){
MyDataSource dataSource = new MyDataSource();
dataSource.setUrl(properties.getUrl());
dataSource.setDriverClassName(properties.getDriverClassName());
dataSource.setUsername(properties.getUsername());
dataSource.setPassword(properties.getPassword());
return dataSource;
}
}
- 不使用@EnableConfigurationProperties,直接在方法上配置 @ConfigurationProperties
@Bean
@ConfigurationProperties(prefix = "jdbc")
public MyDataSource getDataSource(){
return new MyDataSource();
}
- 测试
测试结果如下:
外部配置
涉及一些数据库或者第三方账户信息,出于安全考虑,我们可以在运行程序的时候通过参数指定一个外部配置文件的方式来解决。
java -jar myspringboot.jar --spring.config.location=外部配置文件路径