方式一
@Value(“${xxx}”)
此方式一般多用于读取较少数量或没有相同前缀的属性值。
实例:
1 2 3 4 5 6 7 8
| // 新建一个配置文件application-test.properties age=25 address=nanjing // 在application.yml主配置文件中激活test配置文件,否则获取不到 spring: profiles: active: test
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @RestController @RequestMapping("/v1") public class ReadParamController {
@Value("${age}") private String age;
@Value("${address}") private String address;
@GetMapping("/value") public String readValue() { return age + "-" + address; } }
|
方式二
@ConfigurationProperties(prefix=”xxx”) + @Component(或@Configuration)
此种方式一般多用于当需要读取多个且前缀相同的属性值。
前提: 使用此方式读取配置文件中的属性值时,读取的配置文件需要被激活
实例:
1 2 3 4 5 6 7 8
| // 新建一个配置文件application-user.properties user.age=25 user.address=nanjing // 在application.yml主配置文件中激活user配置文件,否则获取不到 spring: profiles: active: user
|
1 2 3 4 5 6 7 8 9
| @Data @Component @ConfigurationProperties(prefix = "user") public class ReadValueConfig { private String age;
private String address; }
|
1 2 3 4 5 6 7 8 9 10 11
| @RestController @RequestMapping("/v1") public class ReadParamController2 { @Autowired ReadValueConfig readValueConfig;
@GetMapping("/value2") public String readValue() { return readValueConfig.getAge() + "-" + readValueConfig.getAddress(); } }
|
方式三
@Component(或@Configuration) + @PropertySource(value={“classpath:xxxx.properties”}) + @ConfigurationProperties(prefix=”xxxx”)
此种方式与第二种方式的区别就是需要读取的配置文件不需要在主配置文件application.yml中进行激活。而是通过@PropertySource(value={“classpath:xxxx.properties”}) 来指定配置文件所在的地址,程序就会去加载。
1 2 3 4 5 6 7 8 9 10
| @Data @Component @ConfigurationProperties(prefix = "test") @PropertySource(value = {"classpath:test.properties"}) public class ReadValueConfig2 { private String value1;
private String value2; }
|
1 2 3 4 5 6 7 8 9 10 11
| @RestController @RequestMapping("/v1") public class ReadParamController3 { @Autowired ReadValueConfig2 readValueConfig2;
@GetMapping("/value3") public String readValue() { return readValueConfig2.getValue1() + "-" + readValueConfig2.getValue2(); } }
|
方式四
@Component(或@Configuration) + @PropertySource(value={“classpath:xxxx.properties”}) + Environment
这种方式也不需要在主配置文件application.yml中激活需要读取的配置文件,其实可以发现只要使用了@PropertySource注解指定配置文件的路径时,都不需要在主配置文件激活我们需要读取的配置文件。
1 2 3
| // hello.properties hello.param1=param1 hello.param2=param2
|
1 2 3 4
| @Component @PropertySource(value = {"classpath:hello.properties"}) public class ReadValueConfig3 { }
|
使用Environment读取数据:
1 2 3 4 5 6 7 8 9 10 11
| @RestController @RequestMapping("/v1") public class ReadParamController4 { @Autowired private Environment environment;
@GetMapping("/value4") public String readValue() { return environment.getProperty("hello.param1") + "-" + environment.getProperty("hello.param2"); } }
|
总结
一般在实际项目中用的比较多的是前三种方式,各自都有各自存在的场景,按需使用。