SpringCloud项目:SpringBoot1.5.9升级SpringBoot2.0.6踩坑日记
1.依赖变更
升级前:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>
升级后:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-security</artifactId>
</dependency>
2.配置变更
升级前:
# 获取客户端IP
${spring.cloud.client.ipAddress}
#security用户名和密码配置
security:
user:
name:
password:
升级后:
# 获取客户端IP
${spring.cloud.client.ip-address}
#security用户名和密码配置
spring:
security:
user:
name:
password:
3.imports package变更
import org.springframework.boot.web.support.SpringBootServletInitializer;
//升级后:
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
//升级后:
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
//升级后:
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
//升级后:
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
//升级后:
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor;
//升级后:
import org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor;
4.踩过的坑
springboot2.0中默认web容器换了,由AnnotationConfigEmbeddedWebApplicationContext 改为 AnnotationConfigServletWebServerApplicationContext。
org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext;
缓存管理器升级前:
/**
* 缓存管理器.
*
* @param redisTemplate
* @return
*/
@Bean
public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
// 设置缓存默认过期时间30分钟(全局的)
cacheManager.setDefaultExpiration(defaultExpireTime);
return cacheManager;
}
升级后:
/**
* 缓存管理器
* @param redisConnectionFactory
* @return
*/
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// 设置缓存默认过期时间30分钟(全局的)
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofSeconds(defaultExpireTime));
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
.cacheDefaults(redisCacheConfiguration).build();
}
升级后原来的构造方法已经没有了,改成用builder建造模式,它有一个RedisCacheManagerBuilder的内部类;RedisCacheConfiguration是用来初始化配置的,这里只设置了过期时间,如需要配置其他可以看一下这个类。

如果项目中用到Mongodb,配置类也有一点小改动:
升级前:
public AbstractMongoConfiguration() {
}
protected abstract String getDatabaseName();
/** @deprecated */
@Deprecated
protected String getAuthenticationDatabaseName() {
return null;
}
public abstract Mongo mongo() throws Exception;
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(this.mongoDbFactory(), this.mappingMongoConverter());
}
@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
return new SimpleMongoDbFactory(this.mongo(), this.getDatabaseName(), this.getUserCredentials(), this.getAuthenticationDatabaseName());
}
升级后:
public AbstractMongoConfiguration() {
}
public abstract MongoClient mongoClient();
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(this.mongoDbFactory(), this.mappingMongoConverter());
}
@Bean
public MongoDbFactory mongoDbFactory() {
return new SimpleMongoDbFactory(this.mongoClient(), this.getDatabaseName());
}


浙公网安备 33010602011771号