Springboot读取配置文件

指定配置文件 通常情况下我们将配置配置在application开头的主配置文件中,这样随着项目的增大配置项的增多会使文件变得非常臃肿,其实SpringBoot早已考虑到了该问题,SpringBoot提供了@PropertySource和@ImportResource两个注解用于加载外部配置文件使用。 @PropertySource通常用于属性加载配置文件,注意@PropertySource注解不支持加载yaml文件,支持properties文件。另外该注解只对加了的类生效,且application系列是全局属性,不需要单独指出 @ImportResource通常用于加载Spring的xml配置文件 @PropertySource使用 支持从classpath, file (本地), http 来获取配置 装配properties配置文件 在sources/config下创建一个yaml文件命名为user.properties内容与上方user的配置一样 Login类可如下写法 运行一下,同样能达到加载配置效果 当需要根据不同的env读不同的file时,也可以实现 但,这里spring.profiles.active不能配置多个(这个很好理解吧) 同时加载多个配置问题细心的你,会发现@PropertySource注解中属性value为一个数组,如果同时加载多个配置文件,并且不同配置文件中对同一个属性设置了不同的值,那么Spring会识别哪一个呢?带着疑问,我们可以通过控制变量法进行测试,具体过程再在赘述。 结论:Spring加载顺序为从左到右顺序加载,后加载的会覆盖先加载的属性值。 装配yaml配置文件 如果你有强迫症,一定想加载yaml配置文件,那么可以通过PropertySourcesPlaceholderConfigurer类来加载yaml文件,将原来的user.properties改成user.yaml,Bean配置类中加入如下代码,Login配置类和一开始的方式一致。 运行一下,仍然可以能达到加载配置效果的 @ImportResource使用 SpringBoot提出零xml的配置,因此SpringBoot默认情况下时不会识别项目中Spring的xml配置文件。为了能够加载xml的配置文件,SpringBoot提供了@ImportResource注解该注解可以加载Spring的xml配置文件,通常加于启动类上。 also see: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config Spring Boot lets you externalize your configuration so that you can work with the same application code in different environments. You can use a variety of external configuration sources, […]

SpringBoot jar包启动的原理

转自 针对这个问题,之前一直不清楚,只知道jar可直接运行,war包要放到web容器中。 近期在做JPMS改造,当下在IDEA中已可以成功运行,但未找到jar部署的方式,以此为契机,正好把这个疑问解决一下。 感觉这篇文章还不错,就转了过来。因为当前站点主题对代码支持很不好,要结合源码来看。 Jar包结构 首先,先准备一个jar包,我这里准备了一个demo-0.0.1-SNAPSHOT.jar;先来看看jar包里面的目录结构: ├── BOOT-INF│   ├── classes│   │   ├── application.properties│   │   └── com│   │       └── sf│   │           └── demo│   │               └── DemoApplication.class│   └── lib│       ├── […]

Springfox in Spring Boot 2.6.x

来源 在Spring Boot 2.6.0版本,启动报错PatternsRequestCondition.getPatterns()空指针,原因详见springfox的issues ,扩展 URL Matching with PathPattern in Spring MVC 。该版本Spring boot的 Release-Notes 导致报错的原因是: 在SpringMVC的5.3.x系列版本(Spring Boot 2.6.x),引入新的URL Matching方式PathPattern。之前已有的是AntPathMatcher。 在Spring Boot 2.6.0版本,将默认的调整为PathPattern。并提供配置 spring.mvc.pathmatch.matching-strategy=ant_path_matcher 可以切换回AntPathMatcher,但是The actuator endpoints now also use PathPattern based URL matching. Note that the path matching strategy for actuator endpoints is not configurable via a configuration property. 导致报错的就是webEndpointServletHandlerMapping方法的/actuator/health/**、/actuator/health、/actuator这几个方法。所以在找到让springfox忽略(不处理)这几个方法的方案前。还未找到好的解决方案,过滤方式详见方法三 暂通过改源码解决,期待后续方案。📦后的jar详见ex-lib目录。git commit 调整源码修改方式,ex-lib中jar为该方式。详见:git commit 生活总是充满惊喜。上面说了,导致问题的原因是/actuator/**,这些是actuator模块的,项目并未显式的引用,所以为神马会有这几个path? 🤪答案就是redisson。排除掉就可以了,至少只要不需要这些功能,不用改源码 第三种修复方式更为推荐。具体为将springfox中springfox.documentation.spring.web.plugins包下的WebMvcRequestHandlerProvider.java拷贝到项目下(包路径不要变),进行修改,主体为过滤掉PatternsRequestCondition为null的handlerMappings。详见:git commit , 扩展 第四种修复方式更好一些。通过实现BeanPostProcessor,在bean初始化前后插入一些操作。详见:git commit , 出处 一直有新的修复方式加入,针对问题的不同切入点 […]

lWoHvYe 无悔,专一