升级常见问题
【日立迁移】新增功能报错。
问题描述: 新增时通过uaaFeignClient
查询用户信息时报错
修复措施:
- 拉取 uaa镜像,镜像地址:
registry.hisense.com/hisense-pangea/image-pangea-uaa:V2.0.1
, 此镜像更新spring.jpa.open-in-view
参数,false
改为true
- 修改yml文件中的
feign.hystrix.enabled
参数,修改为false
【日立迁移】1.0迁移2.0feign客户端调用问题
问题描述:在后端使用feignClient
调用其他服务接口
修复措施:
- 设置
feign.hystrix.enabled : false
LocalDate
类型的字段上加@JsonFormat
, 规定日期格式- 检查DTO上是否继承
entity
如有删除
【日立迁移】升级后create_by等公共审计字段未填充,导致插入、更新操作失败
问题描述: 1.0默认字段create_by 在新增操作时有值,2.0不默认赋值 导致插入非空字段为null
修复措施:
- 在启动类中添加
@EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware")
- 添加
SpringSecurityAuditorAware
类,代码如下:
java
package com.hisense.pangea.security;
import com.hisense.pangea.config.Constants;
import com.hisense.pangea.security.utils.SecurityUtils;
import org.springframework.data.domain.AuditorAware;
import org.springframework.stereotype.Component;
import java.util.Optional;
@Component
public class SpringSecurityAuditorAware implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.of(Optional.of(SecurityUtils.getLoginName()).orElse(Constants.SYSTEM_ACCOUNT));
}
}
【日立迁移】导入导出失败,报405
问题描述: 导入导出失败,http状态报405 Not Allowed
修复措施:
- 删除路径中的services。 携带services,网关映射不到具体服务。
【日立迁移】Jedis使用异常
问题描述: 微服务使用redis.client包中的jedis访问缓存,升级后在访问缓存时报如下异常:
log
Caused by: java.lang.NoSuchMethodError: redis.clients.jedis.Jedis.set(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)Ljava/lang/String;
at com.hisense.client.service.util.JedisLock.tryGetDistributedLock(JedisLock.java:38)
... 92 common frames omitted
排查原因:
- 由于之前依赖的
spring-data-redis
包版本为2.1.3.RELEASE
,2.0框架依赖该包版本为2.2.5.RELEASE
,导致2.9.1版本的redis.clients
依赖不兼容。
修复措施:
- 检查是否包含
redis.clients
包, 将redis.clients
版本升级到3.1.0
版本, 如下代码
xml
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.0.0</version>
</dependency>
- 在使用jedis的代码中修改如下:
SetParams setParams = new SetParams();
setParams.nx();
setParams.px(expireTime);
String result = jedis.set(lockKey, requestId,setParams);
【日立迁移】feign客户端序列化问题
问题描述: 服务之间通过feign调用,feign接口参数为String类型json字符串,服务端接收后参数为非法json(多双引号),如图:
排查原因:
由于FastJsonHttpMessageConverters
Bean造成参数多次序列化转换
修复措施:
删除fastJsonHttpMessageConterters
bean, 使用默认的HttpMessageConverters
。在项目中添加如下代码:
java
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpMessageConvertersConfig {
@Bean
public HttpMessageConverters httpMessageConverters(){
return new HttpMessageConverters();
}
}
java
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.stereotype.Component;
import java.util.Iterator;
@Component
public class RemoveRegistyBeanFactory implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
if(beanDefinitionRegistry.containsBeanDefinition("fastJsonHttpMessageConverters")){
beanDefinitionRegistry.removeBeanDefinition("fastJsonHttpMessageConverters");
}
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {}
}