1. properties 信息从哪里取在不同的环境,我们需要使用不同的配置,Spring boot 已经提供了相关功能,可以是 properties 文件, yaml 文件 或是命令行参数。优先级如下Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).@TestPropertySource annotations on your tests.@SpringBootTest#properties annotation attribute on your tests.Command line arguments.java -jar app.jar –name=“Spring"Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property).environment vaiable:SPRING_APPLICATION_JSON=’{“acme”:{“name”:“test”}}’ java -jar myapp.jarcommand line:java -Dspring.application.json=’{“name”:“test”}’ -jar myapp.jarjava -jar myapp.jar –spring.application.json=’{“name”:“test”}‘ServletConfig init parameters.ServletContext init parameters.JNDI attributes from java:comp/env.Java System properties (System.getProperties()).OS environment variables.A RandomValuePropertySource that has properties only in random.*.my.secret=${random.value}my.number=${random.int}my.bignumber=${random.long}my.uuid=${random.uuid}my.number.less.than.ten=${random.int(10)}my.number.in.range=${random.int[1024,65536]}Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants).Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants).Application properties outside of your packaged jar (application.properties and YAML variants).Application properties packaged inside your jar (application.properties and YAML variants).@PropertySource annotations on your @Configuration classes.Default properties (specified by setting SpringApplication.setDefaultProperties).2. 使用 application.properties 文件使用 properties 文件,spring boot 会根据以下目录去寻找,添加到 Spring Environment 中,优先级依次递增。classpath:/: resources 目录classpath:/config/: resources 下 config 目录file:./:工程根目录file:./config/: 工程跟目录下的 config 目录2.1 加载顺序:从优先级高的先加载。file:./config/file:./classpath:/config/classpath:/2019-03-27 22:38:24.848 DEBUG 39802 — [ main] o.s.boot.SpringApplication : Loading source class com.example.exitcode.DemoApplication2019-03-27 22:38:24.915 DEBUG 39802 — [ main] o.s.b.c.c.ConfigFileApplicationListener : Loaded config file ‘file:./config/application.properties’ (file:./config/application.properties)2019-03-27 22:38:24.915 DEBUG 39802 — [ main] o.s.b.c.c.ConfigFileApplicationListener : Loaded config file ‘file:./application.properties’ (file:./application.properties)2019-03-27 22:38:24.915 DEBUG 39802 — [ main] o.s.b.c.c.ConfigFileApplicationListener : Loaded config file ‘jar:file:xxxxx-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/config/application.properties’ (classpath:/config/application.properties)2019-03-27 22:38:24.915 DEBUG 39802 — [ main] o.s.b.c.c.ConfigFileApplicationListener : Loaded config file ‘jar:file:xxxxx-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/application.properties’ (classpath:/application.properties)2.2 属性值怎么取优先级高的会覆盖优先级低的。./config/application.propertiestestconfig.first=./config/#testconfig.second=./config/#testconfig.third=./config/#testconfig.fourth=./config/./application.propertiestestconfig.first=./testconfig.second=./#testconfig.third=./#testconfig.fourth=./classpath:/config/application.propertiestestconfig.first=classpath/config/testconfig.second=classpath/config/testconfig.third=classpath/config/#testconfig.fourth=classpath/config/classpath:/application.propertiestestconfig.first=classpathtestconfig.second=classpathtestconfig.third=classpathtestconfig.fourth=classpath输出如下:2019-03-27 23:29:12.434 INFO 1335 — [ main] com.example.properties.DemoApplication : No active profile set, falling back to default profiles: defaultfirst: ./config/second: ./third: classpath/config/fourth: classpath2019-03-27 23:29:13.052 INFO 1335 — [ main] com.example.properties.DemoApplication : Started DemoApplication in 16.565 seconds (JVM running for 23.467)2.3 多环境配置文件加一个文件: classpath:/application-product.propertiestestconfig.first=product-classpathtestconfig.second=product-classpath通过 spring.profiles.active 来指定环境所对应的 properties 文件:运行 java -jar build/libs/properties-0.0.1-SNAPSHOT.jar –spring.profiles.active=product, 输出如下:2019-03-28 20:34:44.726 INFO 25859 — [ main] com.example.properties.DemoApplication : The following profiles are active: productfirst: product-classpathsecond: product-classpaththird: classpath/config/fourth: classpathfifth: ./config/sixth: ./config/seventh: ./config/eightth: ./config/2.3 使用 yaml 文件来代替 properties 文件。也可以使用 yaml 格式的文件。但是在同等目录下,properties 优先级高于 yaml 文件的配置信息。新增文件 ./config/application.ymltestconfig: frist: ./config/yml second: ./config/yml命令 java -jar build/libs/properties-0.0.1-SNAPSHOT.jar 输出为:first: ./config/second: ./config/ymlthird: classpath/config/fourth: classpathfifth: ./config/sixth: ./config/seventh: ./config/eightth: ./config/2.5 属性文件中可以使用变量已经声明过的变量值:app.name=MyAppapp.description=${app.name} is a Spring Boot application