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());
}

posted @ 2020-11-16 10:56  Conwie  阅读(635)  评论(0)    收藏  举报