我们可以在application.properties文件中定义Spring Boot项目的相关属性,当然,这些相关属性可以是系统属性、环境变量、命令参数等信息,也可以是自定义配置文件名称和位置,接下来就演示一下自定一配置属性,这里拿自定义数据库信息举例
(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()注解获得了配置文件中的值
(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也可以实现属性注入的操作,而且支持批量注入,不用每一个属性上都操作了。
(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)查看效果
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")指定外部属性文件。在类上添加