一 .概述
本节主要讲述的就是获取属性文件中的内容.
二 . 使用环境变量获取属性的值
在springboot之中,所有被扫描到的属性文件都会存放在环境变量之中,同时这个环境环境变量还会放置一些其它的属性.因此,我们可以从环境变量之中获取属性文件的值.
jdbc.username=root
我们在application.properties文件之中配置上述的内容.
@SpringBootTest(classes=SpringbootRunnerClass.class) @RunWith(SpringRunner.class) public class PropertiesTest { @Resource private Environment env; @Test public void test() { System.out.println(env.getProperty("jdbc.username")); } }
通过这种方式,我们可以定义默认值和类型转换,看下面的例子:
jdbc.port=9999
我们添加上述的内容,并进行下面的测试:
@Test public void test1() { System.out.println(env.getProperty("jdbc.port",Integer.class)); }
@Test public void test2() { System.out.println(env.getProperty("jdbc.password","trek")); }
在第二个测试之中,我们并没有配置jdbc.password,而是使用了一个默认值进行配置.
三 .使用@Value注解完成属性值的获取
@Value("${jdbc.username}") private String username; @Test public void test3() { System.out.println(username); }
使用这种方式,我们依然可以实现类型转换.
@Value("${jdbc.port}") private Integer port; @Test public void test4() { System.out.println(port); }
但是使用这种方式,我们如果想像上面那样提供一个默认值是不行的.
四.属性文件占位符
prefix=trek
name=${prefix}name
在上面的配置之中,我们使用了占位符的概念.
那么,占位符是否能在spring环境下生效呢?
@Value("${name}") private String name; @Test public void test5() { System.out.println(name); }
我们发现,我们可以在属性文件之中使用${}的表达式完成占位符的操作.
五 .引起其他的属性文件
在springboot之中,为我们提供了@PropertySource完成.
我们首先在资源目录之中建立一个pro的属性文件.
具体的内容如下:
user.age=123
user.password=234
看我们的测试代码:
@Configuration @PropertySource(value="classpath:pro.properties") public class ProConfig { }
我们首先创建一个配置了,将我们另外的配置文件引入到环境变量之中.
@SpringBootTest(classes = SpringbootRunnerClass.class) @RunWith(SpringRunner.class) public class PropertiesTest2 { @Value("${user.age}") private String age; @Value("${user.password}") private String password; @Test public void test() { System.out.println(age); System.out.println(password); } }
我们发现,现在我们可以使用外部的属性文件了.
六 .对象属性映射
我们常常的一个做法就是将属性文件内容映射到一个Bean之中.在springboot之中,我们可以使用@ConfigurationProperties完成.
@Configuration @ConfigurationProperties(prefix="user") public class User { private Integer age; private String password; private String language = "chinese";
在这个配置类之中,我们首先@ConfigurationProperties注解,将前缀为"user"的属性映射到该配置类之中,在这里我们演示了三种情况.
[1]类型转换
[2]默认值
[3]一般情况
@Resource private User user; @Test public void test2() { System.out.println(user); }