使用@PropertySource加载配置文件
对于这种加载自定义配置文件的需求,可以使用@PropertySource注解结合@Configuration注解配置类的方式来实现。@PropertySource注解用于指定自定义配置文件的具体位置和名称。同时,为了保证Spring Boot能够扫描该注解,还需要类上添加@Configuration注解将实体类作为自定义配置类。当然,如果需要将自定义配置文件中的属性值注入到对应类的属性中,可以使用@ConfigurationProperties或者@Value注解进行属性值注入。
为了演示@PropertySource注解的具体使用,下面,在chapter02项目的基础上通过一个案例来演示说明,具体步骤如下。
(1)打开Spring Boot项目chapter02的resources目录,在项目的类路径下新建一个test.properties自定义配置文件,在该配置文件中编写需要设置的配置属性,内容如文件1所示。
文件1 test.properties
1 #对实体类对象MyProperties进行属性配置
2 test.id=110
3 test.name=test
(2)在com.itheima.domain包下新创建一个配置类MyProperties,提供test.properties自定义配置文件中对应的属性,并根据@PropertySource注解的使用进行相关配置,内容如文件2所示。
文件2 MyProperties.java
1 import org.springframework.boot.context.properties.ConfigurationProperties;
2 import org.springframework.boot.context.properties.EnableConfigurationProperties;
3 import org.springframework.context.annotation.Configuration;
4 import org.springframework.context.annotation.PropertySource;
5 @Configuration // 自定义配置类
6 @PropertySource("classpath:test.properties") // 指定自定义配置文件位置和名称
7 @EnableConfigurationProperties(MyProperties.class) // 开启对应配置类的属性注入功能
8 @ConfigurationProperties(prefix = "test") // 指定配置文件注入属性前缀
9 public class MyProperties {
10 private int id;
11 private String name;
12 // 省略属性getXX()和setXX()方法
13 // 省略toString()方法
14 }
文件2中,主要是一个自定义配置类,通过相关注解引入了自定义的配置文件,并完成了自定义属性值的注入。针对示例中的几个注解,具体说明如下。
● @Configuration注解表示当前类是一个自定义配置类,并添加为Spring容器的组件,这里也可以使用传统的@Component注解;
● @PropertySource("classpath:test.properties")注解指定了自定义配置文件的位置和名称,此示例表示自定义配置文件为classpath类路径下的test.properties文件;
● @ConfigurationProperties(prefix = "test")注解将上述自定义配置文件test.properties中以test开头的属性值注入到该配置类属性中。
● @EnableConfigurationProperties(MyProperties.class) 注解表示开启对应配置类MyProperties的属性注入功能,该注解是配合@ConfigurationProperties使用的。如果配置类上使用的是@Component注解而非@Configuration注解,那么@EnableConfigurationProperties注解还可以省略。
(3)打开chapter02项目的测试类Chapter02ApplicationTests,在该测试类中引入MyProperties实体类Bean对象,并新增一个测试方法进行输出测试,示例代码如下。
@Autowired
private MyProperties myProperties;
@Test
public void myPropertiesTest() {
System.out.println(myProperties);
}
上述代码中,先通过@Autowired注解引入了Spring容器中的MyProperties实体类Bean,然后在测试方法myPropertiesTest()中对该Bean对象进行了输出打印。
执行上述测试方法myPropertiesTest()后,查看控制台输出效果,结果如图1所示。
图1 程序测试效果
从图1可以看出,测试方法myPropertiesTest()运行成功,同时正确打印出了MyProperties实体类对象,说明@PropertySource注解成功加载了自定义配置文件。