美文网首页SpringBoot学习
springboot-1:springboot 1.X 和spr

springboot-1:springboot 1.X 和spr

作者: 小小Jerry | 来源:发表于2018-10-29 11:53 被阅读0次

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

工作挺久的了,一直没有怎么看过源码,想用这种记录的方式来推动下自己的学习,有什么错误的地方,还请大家指正。

相关文章

网友评论

    本文标题:springboot-1:springboot 1.X 和spr

    本文链接:https://www.haomeiwen.com/subject/ewhbtqtx.html