我们可以在application.properties文件中定义Spring Boot项目的相关属性,当然,这些相关属性可以是系统属性、环境变量、命令参数等信息,也可以是自定义配置文件名称和位置,接下来就演示一下自定一配置属性,这里拿自定义数据库信息举例
1. 使用@Value()注解完成属性注入
(1)首先引入数据源连接依赖
<dependency>
<groupId>com.github.drtrang</groupId>
<artifactId>druid-spring-boot2-starter</artifactId>
<version>1.1.10</version>
</dependency>
(2) 编写application.yml
jdbc: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/demo username: root password: root
(3) 创建数据源实体类
@Data
@Configuration
public class JdbcConfiguration {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
(4) 测试数据
可以清楚看出通过@Value()注解获得了配置文件中的值
2.使用@ConfigurationProperties批量注入
(1)修改数据源实体类
@Data
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "jdbc")
public class JdbcConfiguration {
private String url;
private String driverClassName;
private String username;
private String password;
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
@Configuration :表示这个类是一个配置累
@EnableConfigurationProperties :使@ConfigurationProperties注解生效
@ConfigurationProperties(prefix = "jdbc") :将配置文件中以jdbc开头的属性值通过 setXX()方法注入到实体类对应属性中
为了在开发中编写自定义的属性时有提示,为了出现代码提示的效果来方便配置, 在使用@ConfigurationProperties注解进行配置文件属性值注入时,可以在pom.xml文件中添加一个Spring Boot提供的配置处理器依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
(2)编写yml配置文件
jdbc:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/demo
username: root
password: root
(3)查看效果
查看效果说明通过@ ConfigurationProperties也可以实现属性注入的操作,而且支持批量注入,不用每一个属性上都操作了。
3.注入第三方配置
(1)创建一个其他组件类(这里当作为第三方的类)
@Data
public class User {
private String userName;
private String pwd;
}
(2)创建给文件的配置类
@Configuration
public class MyUserConfiguration {
@ConfigurationProperties(prefix = "user")
@Bean
public User user(){
return new User();
}
}
(3)编写配置文件
user:
userName: zs
pwd: 123
(4)编写测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
private User user;
@Test
void test() {
System.out.println(user);
}
}
(5)查看效果
4.松散绑定
Spring Boot使用一些宽松的规则将环境属性绑定到@ConfigurationProperties bean,因此环境属性名 和bean属性名之间不需要完全匹配
比如上面那个案例,我们修改配置文件
user:
user_name: zs
pwd: 123
查看效果
发现也是可以绑定成功的。
使用@ConfigurationProperties绑定时支持的松散绑定方式有
羊肉串模式case, 推荐使用:user.user-name
标准驼峰模式:user.userName
下划线模式:user.user_name
大写下划线,如果使用系统环境时候推荐使用 : USER_USER_NAME
总结:
@Configuration:声明一个类作为配置类 @Bean:声明在方法上,将方法的返回值加入Bean容器
@Value:属性注入
@ConfigurationProperties(prefix = "jdbc"):批量属性注入
@PropertySource("classpath:/jdbc.properties")指定外部属性文件。在类上添加