SpringBoot1.5.x升级到2.X经验总结

最近因为有安全需求和其他方面的需求,我们项目的springboot整体要求升级到较高的版本。 因为我们以前版本是<version>1.5.6.RELEASE</version>
这次升级把目的版本号定到了

<version>2.0.1.RELEASE</version>

以下是一些经验总结,供大家参考
针对配置文件的变更:
一、多数据源配置中数据库连接

url:
变更为
jdbc-url:

二、添加新的日志配置方式

application.yml
logging:
  config: classpath:logback-spring.xml

最后附logback-spring.xml文件内容

三、redis配置变更

pool.max-idle: 8 # pool settings ...
pool.min-idle: 1
pool.max-active: 8
pool.max-wait: -1

变更为
jedis:
       pool.max-idle: 8 # pool settings ...
       pool.min-idle: 1
       pool.max-active: 8
       pool.max-wait: -1

四、context-path放到了servlet下

server:
  tomcat:
    max-http-post-size: -1
  context-path: /
  port: 9999

变更为

server:
  tomcat:
    max-http-post-size: -1
  servlet:
    context-path: /
  port: 9999

五、multipart 相关放到了servlet。这表明以后springboot可能不只添加servlet一种方式,可能还会添加其他的容器

http:    
    multipart:
      max-file-size: 5MB
      max-request-size: 100MB
变更为
servlet:
    multipart:
      max-file-size: 5MB
      max-request-size: 100MB

六、mybatis的扫描

#mybatis.mapperLocations=classpath*:/mybatis/*/*Mapper.xml
修改为:
mybatis.mapper-locations=classpath*:/mybatis/*/*Mapper.xml

七、启用外部配置文件
–spring.config.location 变更为 --spring.config.additional-location

nohup java -jar service.caiyouxi.com-1.0-SNAPSHOT.war --spring.config.location=application.properties &
修改为
nohup java -jar service.caiyouxi.com-1.0-SNAPSHOT.war --spring.config.additional-location=application.properties &

八、content-type放到了servlet下面

#spring.thymeleaf.content-type=text/html
修改为
spring.thymeleaf.servlet.content-type=text/html

九、mybatis别名包

#mybatis.typeAliasesPackage=com.caiyouxiouxi
修改为
#mybatis别名包
mybatis.type-aliases-package=com.caiyouxi.order

十、WebAppConfig变更

spring2.x中即可以继承WebMvcConfigurationSupport 也可以实现WebMvcConfigurer。但是老的继承WebMvcConfigurerAdapter已经过时了

MyWebAppConfig extends WebMvcConfigurerAdapter

变更为

MyWebAppConfig extends WebMvcConfigurationSupport {
	/**
	 * springboot 2.X
	 * implements WebMvcConfigurer
	 * extends WebMvcConfigurationSupport
	 * 
	 * springboot 1.5.x
	 * extends WebMvcConfigurerAdapter
	 */

遇到的错误:
‘gsonBuilder’ defined in class path resource [org/springframework/boot/autoconfigure/gson/GsonAutoC

针对POM的变更:
一、指定编译版本和JAVA版本
因为springboot2.X针对JAVA版本最低要求为1.8
Spring Boot 2.0 requires Java 8 as a minimum version.

	<!--JDK 版本 -->
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<!-- 编译时的编码   -->
		<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
		<java.version>1.8</java.version>
	</properties>

二、springboot对 webflux进行了支持,为了方便,我把
spring-boot-starter-web 和spring-boot-starter-webflux 都进行了引用

Web Starter as a Transitive Dependency
Previously several Spring Boot starters were transitively depending on Spring MVC with spring-boot-starter-web. With the new support of Spring WebFlux, spring-boot-starter-mustache, spring-boot-starter-freemarker and spring-boot-starter-thymeleaf are not depending on it anymore. It is the developer’s responsibility to choose and add spring-boot-starter-web or spring-boot-starter-webflux.

	<!--支持 Web 应用开发,包含 Tomcat 和 spring-mvc。 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	<!--模板引擎 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-webflux</artifactId>
	</dependency>

三、不再指定mysql-connector-java的版本

	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<!--<version>5.1.1</version>-->
		<scope>runtime</scope>
	</dependency>

四、mybatis依赖升级为2.0.1

	<dependency>
		<groupId>org.mybatis.spring.boot</groupId>
		<artifactId>mybatis-spring-boot-starter</artifactId>
		<!--  <version>1.1.1</version>-->
		<version>2.0.1</version>
	</dependency>

五、针对druid的依赖由1.1.3升级为1.1.10

	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid-spring-boot-starter</artifactId>
		<version>1.1.10</version>
	</dependency>

六、fastjson 升级到1.2.58

	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>fastjson</artifactId>
		<version>1.2.58</version>
	</dependency>

七、dom4j 和jaxen不再指定版本

	<dependency>
		<groupId>dom4j</groupId>
		<artifactId>dom4j</artifactId>
		<!-- <version>1.6.1</version>-->
	</dependency>
	<dependency>
		<groupId>jaxen</groupId>
		<artifactId>jaxen</artifactId>
		<!-- <version>1.2.0</version>-->
	</dependency>

八、httpcomponents包下的引用不再指定版本号

	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpclient</artifactId>
		<!-- <version>4.5.9</version>-->
	</dependency>

	<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpmime</artifactId>
		<!--<version>4.5.9</version>-->
	</dependency>

	<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpcore</artifactId>
		<!-- <version>4.4.11</version>-->
	</dependency>

九、定时任务的依赖变更,springboot2.x对 quartz有了支持

    原先的

<!--定时任务 -->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>1.8.5</version>
        </dependency>
        改为
<!--定时任务quartz依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-quartz</artifactId>
		</dependency>

十、okhttp3由原来的3.3.0升级至3.14.2

	<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
	<dependency>
		<groupId>com.squareup.okhttp3</groupId>
		<artifactId>okhttp</artifactId>
		<version>3.14.2</version>
	</dependency>

十一、如果用到了guava cache要排除对应的包,springboot2.x不再支持guava cache。
并且把GuavaConfig中的个性化配置注释掉.

GuavaCacheManager
Support for Guava has been dropped in Spring Framework 5. If you were are using GuavaCacheManager, Caffiene (com.github.ben-manes.caffeine:caffeine) and CaffeineCacheManager should be used instead.

 <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-cache</artifactId>
 </dependency>
 <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
       <version>19.0</version>
 </dependency>

十二、surefire-junit3升级到surefire-junit4

<dependency>
    <groupId>org.apache.maven.surefire</groupId>
    <!-- <artifactId>surefire-junit3</artifactId> -->
    <!--JUnit4.7及以上版本,可以明确声明-->
    <!--<artifactId>surefire-junit47</artifactId>-->
    <!--JUnit4.0(含)到JUnit4.7(不含)的版本,这样声明:-->
    <!--<artifactId>surefire-junit4</artifactId>-->
    <!-- <version>2.19</version> -->
    <artifactId>surefire-junit4</artifactId>
    <version>2.22.2</version>
</dependency>

附件:
logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration  scan="true" scanPeriod="10 seconds">

    <!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->

    
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="./log" />
     <!--可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件,假设设置每个月滚动,删除之前的旧文件-->
    <property name="MAXHISTORY" value="30"/>
    <!--设置日志存储最大值-->
    <property name="MAXFILESIZE" value="50MB"/>
    <property name="APP_NAME" value="LOOERY_API"/><!--项目名称-->
     <!-- 性能相关 -->
    <property name="PERF_LOG_PATH" value="${log.path}/${APP_NAME}_perf"/>


    <contextName>${APP_NAME}</contextName>
    <!-- 彩色日志 -->
    <!-- 彩色日志依赖的渲染类 -->
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- 彩色日志格式 -->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>


    <!--输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
        <encoder>
            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>


    <!--输出到文件-->

    <!-- 时间滚动输出 level为 DEBUG 日志 -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_debug.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志归档 -->
            <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${MAXFILESIZE}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>${MAXHISTORY}</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录debug级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>debug</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 INFO 日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_info.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${MAXFILESIZE}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>${MAXHISTORY}</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 时间滚动输出 level为 WARN 日志 -->
    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_warn.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${MAXFILESIZE}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>${MAXHISTORY}</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录warn级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!-- 时间滚动输出 level为 ERROR 日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在记录的日志文件的路径及文件名 -->
        <file>${log.path}/log_error.log</file>
        <!--日志文件输出格式-->
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${MAXFILESIZE}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>${MAXHISTORY}</maxHistory>
        </rollingPolicy>
        <!-- 此日志文件只记录ERROR级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!--
        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、
        以及指定<appender>。<logger>仅有一个name属性,
        一个可选的level和一个可选的addtivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。
              如果未设置此属性,那么当前logger将会继承上级的级别。
        addtivity:是否向上级logger传递打印信息。默认是true。
    -->
    <!--<logger name="org.springframework.web" level="info"/>-->
    <!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
    <!--
        使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
        第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
        第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别:
     -->


    <!--
        root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
        不能设置为INHERITED或者同义词NULL。默认是DEBUG
        可以包含零个或多个元素,标识这个appender将会添加到这个logger。
    -->

    <!--开发环境:打印控制台-->
    <springProfile name="dev">
        <logger name="com.nmys.view" level="debug"/>
    </springProfile>

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="DEBUG_FILE" />
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="WARN_FILE" />
        <appender-ref ref="ERROR_FILE" />
    </root>

    <!--生产环境:输出到文件-->
    <!--<springProfile name="pro">-->
        <!--<root level="info">-->
            <!--<appender-ref ref="CONSOLE" />-->
            <!--<appender-ref ref="DEBUG_FILE" />-->
            <!--<appender-ref ref="INFO_FILE" />-->
            <!--<appender-ref ref="ERROR_FILE" />-->
            <!--<appender-ref ref="WARN_FILE" />-->
        <!--</root>-->
    <!--</springProfile>-->

</configuration>

参考:
Spring Boot 2.0 Release Notes
Spring Boot 2.0 Migration Guide

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值