Skip to content

升级常见问题

【日立迁移】新增功能报错。

问题描述: 新增时通过uaaFeignClient查询用户信息时报错
修复措施

  1. 拉取 uaa镜像,镜像地址:registry.hisense.com/hisense-pangea/image-pangea-uaa:V2.0.1, 此镜像更新spring.jpa.open-in-view参数,false改为true
  2. 修改yml文件中的 feign.hystrix.enabled参数,修改为false

【日立迁移】1.0迁移2.0feign客户端调用问题

问题描述:在后端使用feignClient调用其他服务接口
修复措施

  1. 设置feign.hystrix.enabled : false
  2. LocalDate类型的字段上加 @JsonFormat, 规定日期格式
  3. 检查DTO上是否继承entity 如有删除

【日立迁移】升级后create_by等公共审计字段未填充,导致插入、更新操作失败

问题描述: 1.0默认字段create_by 在新增操作时有值,2.0不默认赋值 导致插入非空字段为null
修复措施:

  1. 在启动类中添加@EnableJpaAuditing(auditorAwareRef = "springSecurityAuditorAware")
  2. 添加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

排查原因

  1. 由于之前依赖的spring-data-redis包版本为2.1.3.RELEASE,2.0框架依赖该包版本为2.2.5.RELEASE,导致2.9.1版本的redis.clients依赖不兼容。

修复措施:

  1. 检查是否包含redis.clients包, 将redis.clients版本升级到3.1.0版本, 如下代码
xml
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.0.0</version>
</dependency>
  1. 在使用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造成参数多次序列化转换

修复措施:

删除fastJsonHttpMessageContertersbean, 使用默认的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 {}
}