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
大致遇到了這些問題,然后就可以正常編譯啟動了。