Spring boot 1.5.9升級2.0踩坑筆記

Spring Boot 2.0

spring boot 2.0正式版本發(fā)布有段時間了,關(guān)于新特性的東西網(wǎng)上隨便搜索一大堆,修改了很多東西。由于我需要將公司項(xiàng)目升級到spring cloud,所以想想干脆升級一下spring boot,下面記錄我升級的過程。

pom.xml

首先肯定是要將版本號升級到最新的2.0.1.RELEASE,其次取消的log4j的包,需要手工在pom中添加,如果用到了redis,則需要添加commons-pool2包。

image.png

image.png

yml配置參數(shù)改動

原spring.http.或spring.server.下的一些參數(shù),例如我用到了文件上傳參數(shù),已修改為sping.servlet.multipart下

image.png

redis改動

redis默認(rèn)實(shí)現(xiàn)類從原來的Jedis改為lettuce
yml中參數(shù)也需要修改


image.png
/**
 * @Autor: Show
 * @Description: Redis緩存配置
 * @Date: 2018-01-31 13:32
 * @Modified By:
 * @Remark:
 */
@EnableCaching
@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
public class RedisConfig extends CachingConfigurerSupport {

    @Bean(name = "redisTemplate")
    @SuppressWarnings("unchecked")
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();

        //使用fastjson序列化
        FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
        template.setValueSerializer(fastJsonRedisSerializer);
        template.setHashValueSerializer(fastJsonRedisSerializer);
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

    
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager
                .RedisCacheManagerBuilder
                .fromConnectionFactory(redisConnectionFactory);
        return builder.build();
    }
}

棄用WebMvcConfigurerAdapter

spring boot 2.0中將原來的WebMvcConfigurerAdapter替換為WebMvcConfigurer

/**
 * @Autor: Show
 * @Description:
 * @Date: 2018-04-03 8:48
 * @Modified By:
 * @Remark:
 */
@Configuration
public class DefaultViewConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:/index.html");
        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
    }
}

Validate驗(yàn)證注解改動

org.hibernate.validator.constraints棄用了幾個注解


image.png

例如@NoEmpty改為javax.validation.constraints.NotEmpty

EmbeddedServletContainerFactory

之前在做http地址轉(zhuǎn)https時用到了這玩意,發(fā)現(xiàn)2.0中取消了,如下是新的寫法

/**
 * @Autor: Show
 * @Description:
 * @Date: 2018-04-16 12:04
 * @Modified By:
 * @Remark:
 */
@Configuration
public class TomcatHttpsConfig {

    @Value("${server.port}")
    private Integer httpsPort;

    /*@Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createSslConnector()); // 添加http
        return tomcat;
    }
    
    /*該寫法已經(jīng)不支持,會編譯不通過
    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        connector.setScheme("https");
        connector.setSecure(true);
        connector.setPort(port);
        protocol.setSSLEnabled(true);
        protocol.setKeystoreFile(file);
        protocol.setKeystorePass(password);
        return connector;
    }*/

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory()
        {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(redirectConnector());
        return tomcat;
    }

    private Connector redirectConnector() {

        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(80);
        connector.setRedirectPort(httpsPort);
        return connector;
    }
}

Spring Data MongoDB取消了findOne方法

新版本取消了findOne改為findById,findById返回Optional<T>類型,所以寫法有所改動。

image.png

大致遇到了這些問題,然后就可以正常編譯啟動了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容