Spring Cloud微服务实战 打造企业级优惠券系统 3-4 SpringBoot配置文件加载顺序
0 课程地址
https://coding.imooc.com/lesson/380.html#mid=28272
1 浓缩精华
1.1 3.1,3.2
2 个人关注
2.1 3.3
3 课程内容
3.1 同一目录下的application和bootstrap
- bootstrap优先级高于application,优先被加载
- bootstrap 用于应用程序上下文的引导阶段,由父ApplicationContext加载bootstrap是系统级别的配置(不变的参数),
- application是应用级别的配置
3.2 不同位置的配置文件加载顺序(优先级)
- sfile:/config/-优先级最高(项目根路径下的config)
- file:./-优先级第二(项目根路径下)
- classpath:/config/-优先级第三(项目resources/config下)
- classpath/-优先级第四(项目resources目录下)高优先级覆盖低优先级相同配置多个配置文件互补
3.3 注意事项
- 跟路径下的配置文件不会被打包
- 不同位置的配置文件优先级顺序最好将 配置spring.profiles.active 排除在外
4 代码演练
4.1 配置application.xml demo
- application.yml配置
spring:
application:
name: imooc_springboot_study
server:
#端口号
port: 8081
servlet:
#前缀
context-path: /imooc
- 启动类
package com.imooc.springboot.application; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; /** * SpringBootApplication * * @author 魏豆豆 * @date 2021/1/13 */ @SpringBootApplication public class SpringBootStudyApplication { public static void main(String [] args){ //第一种方式启动 SpringApplication.run(SpringBootStudyApplication.class,args); //第二种方式启动 /*SpringApplication springApplication = new SpringApplication(SpringBootStudyApplication.class); //关掉打印logo相关日志 springApplication.setBannerMode(Banner.Mode.OFF); //非wub启动,控制台启动后会关闭,不会一直保持开启状态 springApplication.setWebApplicationType(WebApplicationType.NONE); springApplication.run(args);*/ //第三种方式启动 链式调用 /* new SpringApplicationBuilder(SpringBootStudyApplication.class) //.bannerMode(Banner.Mode.OFF) .web(WebApplicationType.NONE).run(args);*/ } }
-
打印日志:
D:javajdkjdk8jdkinjava.exe "-javaagent:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4libidea_rt.jar=47197:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4in" -Dfile.encoding=UTF-8 -classpath D:javajdkjdk8jdkjrelibcharsets.jar;D:javajdkjdk8jdkjrelibdeploy.jar;D:javajdkjdk8jdkjrelibextaccess-bridge-64.jar;D:javajdkjdk8jdkjrelibextcldrdata.jar;D:javajdkjdk8jdkjrelibextdnsns.jar;D:javajdkjdk8jdkjrelibextjaccess.jar;D:javajdkjdk8jdkjrelibextjfxrt.jar;D:javajdkjdk8jdkjrelibextlocaledata.jar;D:javajdkjdk8jdkjrelibext ashorn.jar;D:javajdkjdk8jdkjrelibextsunec.jar;D:javajdkjdk8jdkjrelibextsunjce_provider.jar;D:javajdkjdk8jdkjrelibextsunmscapi.jar;D:javajdkjdk8jdkjrelibextsunpkcs11.jar;D:javajdkjdk8jdkjrelibextzipfs.jar;D:javajdkjdk8jdkjrelibjavaws.jar;D:javajdkjdk8jdkjrelibjce.jar;D:javajdkjdk8jdkjrelibjfr.jar;D:javajdkjdk8jdkjrelibjfxswt.jar;D:javajdkjdk8jdkjrelibjsse.jar;D:javajdkjdk8jdkjrelibmanagement-agent.jar;D:javajdkjdk8jdkjrelibplugin.jar;D:javajdkjdk8jdkjrelib esources.jar;D:javajdkjdk8jdkjrelib t.jar;F:kewaiSpringCloudlaoqinchapter_3imooc_springboot_study argetclasses;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-starter-web2.1.4.RELEASEspring-boot-starter-web-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-starter2.1.4.RELEASEspring-boot-starter-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot2.1.4.RELEASEspring-boot-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-autoconfigure2.1.4.RELEASEspring-boot-autoconfigure-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-starter-logging2.1.4.RELEASEspring-boot-starter-logging-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositorychqoslogbacklogback-classic1.2.3logback-classic-1.2.3.jar;C:Usersweijingli.m2 epositorychqoslogbacklogback-core1.2.3logback-core-1.2.3.jar;C:Usersweijingli.m2 epositoryorgapachelogginglog4jlog4j-to-slf4j2.11.2log4j-to-slf4j-2.11.2.jar;C:Usersweijingli.m2 epositoryorgapachelogginglog4jlog4j-api2.11.2log4j-api-2.11.2.jar;C:Usersweijingli.m2 epositoryorgslf4jjul-to-slf4j1.7.26jul-to-slf4j-1.7.26.jar;C:Usersweijingli.m2 epositoryjavaxannotationjavax.annotation-api1.3.2javax.annotation-api-1.3.2.jar;C:Usersweijingli.m2 epositoryorgyamlsnakeyaml1.23snakeyaml-1.23.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-starter-json2.1.4.RELEASEspring-boot-starter-json-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositorycomfasterxmljacksoncorejackson-databind2.9.8jackson-databind-2.9.8.jar;C:Usersweijingli.m2 epositorycomfasterxmljacksoncorejackson-annotations2.9.0jackson-annotations-2.9.0.jar;C:Usersweijingli.m2 epositorycomfasterxmljacksoncorejackson-core2.9.8jackson-core-2.9.8.jar;C:Usersweijingli.m2 epositorycomfasterxmljacksondatatypejackson-datatype-jdk82.9.8jackson-datatype-jdk8-2.9.8.jar;C:Usersweijingli.m2 epositorycomfasterxmljacksondatatypejackson-datatype-jsr3102.9.8jackson-datatype-jsr310-2.9.8.jar;C:Usersweijingli.m2 epositorycomfasterxmljacksonmodulejackson-module-parameter-names2.9.8jackson-module-parameter-names-2.9.8.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-starter-tomcat2.1.4.RELEASEspring-boot-starter-tomcat-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgapache omcatembed omcat-embed-core9.0.17 omcat-embed-core-9.0.17.jar;C:Usersweijingli.m2 epositoryorgapache omcatembed omcat-embed-el9.0.17 omcat-embed-el-9.0.17.jar;C:Usersweijingli.m2 epositoryorgapache omcatembed omcat-embed-websocket9.0.17 omcat-embed-websocket-9.0.17.jar;C:Usersweijingli.m2 epositoryorghibernatevalidatorhibernate-validator6.0.16.Finalhibernate-validator-6.0.16.Final.jar;C:Usersweijingli.m2 epositoryjavaxvalidationvalidation-api2.0.1.Finalvalidation-api-2.0.1.Final.jar;C:Usersweijingli.m2 epositoryorgjbossloggingjboss-logging3.3.2.Finaljboss-logging-3.3.2.Final.jar;C:Usersweijingli.m2 epositorycomfasterxmlclassmate1.4.0classmate-1.4.0.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-web5.1.6.RELEASEspring-web-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-beans5.1.6.RELEASEspring-beans-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-webmvc5.1.6.RELEASEspring-webmvc-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-aop5.1.6.RELEASEspring-aop-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-context5.1.6.RELEASEspring-context-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-expression5.1.6.RELEASEspring-expression-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositoryorgprojectlomboklombok1.18.6lombok-1.18.6.jar;C:Usersweijingli.m2 epositoryorgslf4jslf4j-api1.7.26slf4j-api-1.7.26.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-core5.1.6.RELEASEspring-core-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkspring-jcl5.1.6.RELEASEspring-jcl-5.1.6.RELEASE.jar;C:Usersweijingli.m2 epositorycomalibabafastjson1.2.31fastjson-1.2.31.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-configuration-processor2.1.4.RELEASEspring-boot-configuration-processor-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-starter-actuator2.1.4.RELEASEspring-boot-starter-actuator-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-actuator-autoconfigure2.1.4.RELEASEspring-boot-actuator-autoconfigure-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryorgspringframeworkootspring-boot-actuator2.1.4.RELEASEspring-boot-actuator-2.1.4.RELEASE.jar;C:Usersweijingli.m2 epositoryiomicrometermicrometer-core1.1.4micrometer-core-1.1.4.jar;C:Usersweijingli.m2 epositoryorghdrhistogramHdrHistogram2.1.9HdrHistogram-2.1.9.jar;C:Usersweijingli.m2 epositoryorglatencyutilsLatencyUtils2.0.3LatencyUtils-2.0.3.jar com.imooc.springboot.application.SpringBootStudyApplication . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ ( ( )\___ | '_ | '_| | '_ / _` | \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.4.RELEASE) 2021-03-12 06:13:02.446 INFO 13696 --- [ main] c.i.s.a.SpringBootStudyApplication : Starting SpringBootStudyApplication on DESKTOP-A08HONB with PID 13696 (F:kewaiSpringCloudlaoqinchapter_3imooc_springboot_study argetclasses started by weijingli in F:kewaiSpringCloudlaoqinchapter_3imooc_springboot_study) 2021-03-12 06:13:02.446 INFO 13696 --- [ main] c.i.s.a.SpringBootStudyApplication : No active profile set, falling back to default profiles: default 2021-03-12 06:13:04.971 ERROR 13696 --- [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.32] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14] 2021-03-12 06:13:05.942 ERROR 13696 --- [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.32] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14] 2021-03-12 06:13:06.143 INFO 13696 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http) 2021-03-12 06:13:06.158 ERROR 13696 --- [ main] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.32] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14] 2021-03-12 06:13:06.174 INFO 13696 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2021-03-12 06:13:06.174 INFO 13696 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.17] 2021-03-12 06:13:06.375 INFO 13696 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/imooc] : Initializing Spring embedded WebApplicationContext 2021-03-12 06:13:06.375 INFO 13696 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3818 ms 2021-03-12 06:13:07.311 INFO 13696 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2021-03-12 06:13:07.711 INFO 13696 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator' 2021-03-12 06:13:07.859 INFO 13696 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8081 (http) with context path '/imooc' 2021-03-12 06:13:07.859 INFO 13696 --- [ main] c.i.s.a.SpringBootStudyApplication : Started SpringBootStudyApplication in 6.339 seconds (JVM running for 7.18)
4.2 多个配置文件选择
-
application.yml
spring: profiles: # active: prod 生效的配置文件 active: dev application: name: imooc_springboot_study server: #端口号 # port: 8081 # servlet: # context-path: /imooc
- application-dev.yml
server: #端口号 port: 8082 servlet: context-path: /imooc-dev
- 启动类
package com.imooc.springboot.application; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; /** * SpringBootApplication * * @author 魏豆豆 * @date 2021/1/13 */ @SpringBootApplication public class SpringBootStudyApplication { public static void main(String [] args){ //第一种方式启动 //SpringApplication.run(SpringBootStudyApplication.class,args); //第二种方式启动 /*SpringApplication springApplication = new SpringApplication(SpringBootStudyApplication.class); //关掉打印logo相关日志 springApplication.setBannerMode(Banner.Mode.OFF); //非wub启动,控制台启动后会关闭,不会一直保持开启状态 springApplication.setWebApplicationType(WebApplicationType.NONE); springApplication.run(args);*/ //第三种方式启动 链式调用 new SpringApplicationBuilder(SpringBootStudyApplication.class) //.bannerMode(Banner.Mode.OFF) // .web(WebApplicationType.NONE) .run(args); } }
- 打印日志
2021-03-12 06:54:25.000 INFO 15908 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8082 (http) 2021-03-12 06:54:26.972 INFO 15908 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8082 (http) with context path '/imooc-dev'
4.3 不同路径下优先级顺序测试
-
根路径 config文件夹下:application.xml
server: #端口号 port: 8085 # servlet: # context-path: /imooc
- 常规resource路径下:application.xml
spring: # profiles: # active: prod #注意:这里不能有profiles active: dev,否则 按application-dev配置文件的端口号 # active: dev application: name: imooc_springboot_study server: #端口号 port: 8081 # servlet: # context-path: /imooc
- 启动类
package com.imooc.springboot.application; import org.springframework.boot.Banner; import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; /** * SpringBootApplication * * @author 魏豆豆 * @date 2021/1/13 */ @SpringBootApplication public class SpringBootStudyApplication { public static void main(String [] args){ //第一种方式启动 //SpringApplication.run(SpringBootStudyApplication.class,args); //第二种方式启动 /*SpringApplication springApplication = new SpringApplication(SpringBootStudyApplication.class); //关掉打印logo相关日志 springApplication.setBannerMode(Banner.Mode.OFF); //非wub启动,控制台启动后会关闭,不会一直保持开启状态 springApplication.setWebApplicationType(WebApplicationType.NONE); springApplication.run(args);*/ //第三种方式启动 链式调用 new SpringApplicationBuilder(SpringBootStudyApplication.class) //.bannerMode(Banner.Mode.OFF) // .web(WebApplicationType.NONE) .run(args); } }
- 打印日志
2021-03-12 07:17:05.080 INFO 3240 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8085 (http) with context path ''