spring boot 问题

Springboot Filter中注入bean 无效为null

问题原因:

Web应用的启动顺序是:Lisenter->Fliter->Servlet,  应用程序上下文, 初始化 Fliter的时候,还没有初始化Servlert,所有没有进入DispacterServlet的初始化,故在Fliter中使用注解注入bean为空;

解决办法:

添加初始化bean配置,手动创建对象new

springboot中的配置文件server.context-path不起作用

因为spring boot版本问题导致的!!现在用的比较新的版本在2.0以上!以前是1.0-2.0之间的.server.context-path=/XXXXX

1
2
server.servlet.context-path=/XXXXX  # 2.0以上
server.context-path=/XXXXX # 2.0以下

springboot无法完成变量从pom到.properties文件自动替换的问题

我在maven的pom文件中进行了多环境变量配置,引用了maven-resources-plugin,在application.properties文件中通过以下配置指定不同环境下的配置文件,

1
spring.profiles.active = ${profiles.active}

但是${profiles.active}无法从pom文件中获取变量值替换

由于${}方式会被maven处理。如果你pom继承了spring-boot-starter-parent,Spring
Boot已经将maven-resources-plugins默认的${}方式改为了@@方式,如@name@

1
2
3
spring:
profiles:
active: @spring.profile.active@
1
2
3
<properties>
<spring.profile.active>sit</spring.profile.active>
</properties>

如果还想继续使用${}占位符方式,只需要在pom文件中加上下面配置即可:

1
2
3
4
5
6
7
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>utf-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
1
2
# #tag.tagid,不能使用 #{tag.tagid}
@Cacheable(value = ARTICLES_CACHE_NAME, key = "'findArtileByTag'+#tag.tagId+#page+#limit+#status")

较新版的Spring Boot取消了@SpringApplicationConfiguration这个注解,用@SpringBootTest就可以了