经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
springboot之配置文件
来源:cnblogs  作者:海之浪子  时间:2018/9/30 11:07:49  对本文有异议

springboot在加载配置文件的时候是有先后顺序的,了解加载配置文件的先后顺序,可以减少编写程序出现错误

1 springboot加载配置文件的先后顺序如下:

SpringApplication将从以下位置加载application.properties文件,并把它们添加到Spring Environment中:

  1. 当前目录下的/config子目录。
  2. 当前目录。
  3. classpath下的/config包。
  4. classpath根路径(root)

  启动的时候,1中的配置文件优先级最高,会覆盖2,3,4中的配置信息

2 工程结构如图:

代码如下:

  1. package com.rookie.bigdata.config;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.stereotype.Component;
  5. /**
  6. * springboot注入随机值
  7. * my.secret=${random.value}
  8. * my.number=${random.int}
  9. * my.bignumber=${random.long}
  10. * my.number.less.than.ten=${random.int(10)}
  11. * my.number.in.range=${random.int[1024,65536]}
  12. * <p>
  13. * <p>
  14. * Created by on 2018/9/29.
  15. */
  16. @Component
  17. //此注解可以省略
  18. //@ConfigurationProperties
  19. public class RandomConfig {
  20. @Value("${random.value}")
  21. private String secret;
  22. @Value("${random.long}")
  23. private Long number;
  24. @Value("${random.int(10)}")
  25. private String numberLess;
  26. @Value("${random.int[1024,65536]}")
  27. private Integer numberRange;
  28. @Value("${name}")
  29. private String name;
  30. public String getName() {
  31. return name;
  32. }
  33. public void setName(String name) {
  34. this.name = name;
  35. }
  36. public String getSecret() {
  37. return secret;
  38. }
  39. public void setSecret(String secret) {
  40. this.secret = secret;
  41. }
  42. public Long getNumber() {
  43. return number;
  44. }
  45. public void setNumber(Long number) {
  46. this.number = number;
  47. }
  48. public String getNumberLess() {
  49. return numberLess;
  50. }
  51. public void setNumberLess(String numberLess) {
  52. this.numberLess = numberLess;
  53. }
  54. public Integer getNumberRange() {
  55. return numberRange;
  56. }
  57. public void setNumberRange(Integer numberRange) {
  58. this.numberRange = numberRange;
  59. }
  60. }
  1. package com.rookie.bigdata.config;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.stereotype.Component;
  4. /**
  5. *
  6. * springboot允许使用占位符进行配置
  7. * Created by on 2018/9/29.
  8. */
  9. @Component
  10. public class AppConfig {
  11. @Value("${app.name}")
  12. private String appName;
  13. @Value("${app.description}")
  14. private String appDesc;
  15. public String getAppName() {
  16. return appName;
  17. }
  18. public void setAppName(String appName) {
  19. this.appName = appName;
  20. }
  21. public String getAppDesc() {
  22. return appDesc;
  23. }
  24. public void setAppDesc(String appDesc) {
  25. this.appDesc = appDesc;
  26. }
  27. }
  1. package com.rookie.bigdata;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. /**
  5. * 应用程序启动类
  6. * Created by on 2018/8/2.
  7. */
  8. @SpringBootApplication
  9. public class Application {
  10. public static void main(String[] args) {
  11. SpringApplication springApplication = new SpringApplication();
  12. //通过设置该参数禁用命令行属性添加到Environment
  13. // springApplication.setAddCommandLineProperties(false);
  14. springApplication.run(Application.class, args);
  15. }
  16. }
  1. package com.rookie.bigdata.config;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import org.springframework.test.context.junit4.SpringRunner;
  7. import static org.junit.Assert.*;
  8. /**
  9. * Created by liuxili on 2018/9/29.
  10. */
  11. @RunWith(SpringRunner.class)
  12. @SpringBootTest
  13. public class AppConfigTest {
  14. @Autowired
  15. AppConfig appConfig;
  16. @Test
  17. public void test1() {
  18. System.out.println(appConfig.getAppName());
  19. System.out.println(appConfig.getAppDesc());
  20. }
  21. }
  1. package com.rookie.bigdata.config;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import org.springframework.test.context.junit4.SpringRunner;
  7. import static org.junit.Assert.*;
  8. /**
  9. * Created by liuxili on 2018/9/29.
  10. */
  11. @RunWith(SpringRunner.class)
  12. @SpringBootTest
  13. public class RandomConfigTest {
  14. @Autowired
  15. RandomConfig randomConfig;
  16. @Test
  17. public void test1(){
  18. System.out.println(randomConfig.getSecret());
  19. System.out.println(randomConfig.getNumber());
  20. System.out.println(randomConfig.getNumberLess());
  21. System.out.println(randomConfig.getNumberRange());
  22. System.out.println(randomConfig.getName());
  23. }
  24. }

配置文件如下

  1. my.secret=${random.value}
  2. my.number=${random.int}
  3. my.bignumber=${random.long}
  4. my.number.less.than.ten=${random.int(10)}
  5. #my.number.in.range=${random.int[1024,65536]}
  6. name=lisi
  7. #属性占位符
  8. #当使用application.properties定义的属性时,Spring会先通过已经存在的Environment查找该属性,所以你可以引用事先定义的值
  9. app.name=appStore
  10. app.description=${app.name} is a Spring Boot application
  11. connection.username=root
  12. connection.password=roots

3、使用@Value("${property}")注解注入配置属性有时会比较麻烦,特别是需要使用多个properties,或数据本身有层次结构。Spring Boot提供一种使用配置的替代方法,这种方法允许强类型的beans以管理和校验应用的配置,代码如下:

  1. package com.rookie.bigdata.config;
  2. import org.springframework.boot.context.properties.ConfigurationProperties;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.stereotype.Component;
  5. /**
  6. * Created by liuxili on 2018/9/29.
  7. */
  8. //@Component
  9. @Configuration
  10. @ConfigurationProperties(prefix = "connection")
  11. public class ConnectionConfig {
  12. private String userName;
  13. private String passWord;
  14. public String getUserName() {
  15. return userName;
  16. }
  17. public void setUserName(String userName) {
  18. this.userName = userName;
  19. }
  20. public String getPassWord() {
  21. return passWord;
  22. }
  23. public void setPassWord(String passWord) {
  24. this.passWord = passWord;
  25. }
  26. }
  1. package com.rookie.bigdata.config;
  2. import org.junit.Test;
  3. import org.junit.runner.RunWith;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import org.springframework.test.context.junit4.SpringRunner;
  7. import static org.junit.Assert.*;
  8. /**
  9. * Created by liuxili on 2018/9/29.
  10. */
  11. @RunWith(SpringRunner.class)
  12. @SpringBootTest
  13. public class ConnectionConfigTest {
  14. @Autowired
  15. private ConnectionConfig connectionConfig;
  16. @Test
  17. public void test1(){
  18. System.out.println(connectionConfig.getPassWord());
  19. System.out.println(connectionConfig.getUserName());
  20. }
  21. }

属性名配置一般规则如下:

属性说明
person.firstName 标准驼峰规则
person.first-name 虚线表示,推荐用于.properties.yml文件中
person.first_name 下划线表示,用于.properties.yml文件的可选格式
PERSON_FIRST_NAME 大写形式,使用系统环境变量时推荐

对于使用yml文件配置跟这里配置差不多,这里不再赘述,看个人喜好,有人喜好properties进行配置,有人喜好yml文件进行配置

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号