springboot2和1相比,配置文件会发生一些变化,可能会在升级过程中出现一些配置项不生效的问题。
解决方法:到 spring-boot-autoconfigure-XXXX-sources.jar 对应版本的源码中查看对应package下的*Properties的源码,一般都可以找到答案:有web、thymeleaf、mail、quartz、logging等,可以在对应的package下面找到对应的配置。
下面以port、context-path、session-timeout为例查看在1.x和2.x中的区别
1.1 springboot 1.x
在1.x版本中,配置文件如下,是生效的:
server.port=10101
server.context-path=/xxx
server.session.timeout=3600
对应的源码可以在org.springframework.boot.autoconfigure.web.ServerProperties中找到
@ConfigurationProperties(prefix = "server"@1, ignoreUnknownFields = true)
public class ServerProperties
implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered {
/**
* Server HTTP port.
*/
private Integer port; @2
/**
* Context path of the application.
*/
private String contextPath; @3
private Session session = new Session(); @4
public static class Session {
/**
* Session timeout in seconds.
*/
private Integer timeout; @5
}
}
如上代码:
@1:表示以server.开头的会映射到这个属性配置文件中</br>
@2:server.port: 配置http端口</br>
@3:server.context-path: 配置访问路径,驼峰转换</br>
@4:这里的Session是一个内部类,在2.x的版本中Session不再是内部类</br>
@5:server.session.timeout: 配置超时时间</br>
1.2 springboot 2.x
在2.x的版本中,如下配置才会生效
server:
port: 8081
servlet:
context-path: /test
session:
# session超时时间,单位为秒
timeout: 100
可以看到port的配置没有变化,但是timeout和context-path都多个一层servlet
查看源码可以发现2.x相比1.x是有一些变化,同样是org.springframework.boot.autoconfigure.web.ServerProperties
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {
/**
* Server HTTP port.
*/
private Integer port; @1
private final Servlet servlet = new Servlet(); @2
public static class Servlet {
/**
* Context path of the application.
*/
private String contextPath;
@NestedConfigurationProperty
private final Session session = new Session(); @3
}
}
org.springframework.boot.web.servlet.server.Session
/**
* Session properties.
*
* @author Andy Wilkinson
* @since 2.0.0
*/
public class Session {
@DurationUnit(ChronoUnit.SECONDS)
private Duration timeout = Duration.ofMinutes(30); @4
}
@1:端口配置没有变化
@2:没有了Session这个内部类,取而代之的是Servlet这个内部类
@3:这个内部类中配置有一个Session对象的属性
@4:在 org.springframework.boot.web.servlet.server.Session 这个里面定义了Session中的timeout
工作挺久的了,一直没有怎么看过源码,想用这种记录的方式来推动下自己的学习,有什么错误的地方,还请大家指正。