Spring Cloud Greenwich.SR4 升级为Ho
2019-12-30 本文已影响0人
EasyNetCN
以下内容以本人的环境为参考
花了差不多两天的时间,把Spring Cloud Greenwich.SR4升级为Hoxton.SR1
pom.xml使用最新版本的Spring Boot和Spring Cloud
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
pom.xml中使用最新的loadbalancer
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
如果没有使用feign,可以bootstrap.yml使用reactor loadbalancer
spring:
application:
name: activity-service
profiles:
active: development-local
cloud:
consul:
host: ${consul.host:localhost}
port: ${consul.port:8500}
discovery:
prefer-ip-address: true
config:
enabled: true
format: yaml
default-context: ${spring.application.name}
loadbalancer:
ribbon:
enabled: false
如果使用了feign,使用reactor loadbalancer会有异常,暂时没有找到解决方法
使用feign,需要定义HttpMessageConverters,参考如下
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
public class HttpMessageConverterConfig {
@Bean
public HttpMessageConverters messageConverters(ObjectMapper objectMapper) {
return new HttpMessageConverters() {
@Override
protected List<HttpMessageConverter<?>> postProcessConverters(List<HttpMessageConverter<?>> converters) {
var index = 0;
for (var i = 0; i < converters.size(); i++) {
var converter = converters.get(i);
if (converter instanceof MappingJackson2HttpMessageConverter) {
index = i;
}
}
converters.remove(index);
var jsonConverter = new MappingJackson2HttpMessageConverter(objectMapper);
converters.add(jsonConverter);
return converters;
}
};
}
}
自定义日期格式化:yyyy-MM-dd HH:mm:ss
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import org.springframework.boot.autoconfigure.jackson.JacksonProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
@Configuration
public class JsonConfig {
@Bean
public LocalDateTimeDeserializer localDateTimeDeserializer(JacksonProperties jacksonProperties) {
return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(jacksonProperties.getDateFormat()));
}
@Bean
public LocalDateTimeSerializer localDateTimeSerializer(JacksonProperties jacksonProperties) {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(jacksonProperties.getDateFormat()));
}
@Bean
@Primary
public SimpleModule localDateTimeSimpleModule(LocalDateTimeDeserializer localDateTimeDeserializer,
LocalDateTimeSerializer localDateTimeSerializer) {
SimpleModule module = new SimpleModule();
module.addSerializer(LocalDateTime.class, localDateTimeSerializer);
module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);
return module;
}
@Bean
@Primary
public ObjectMapper objectMapper(SimpleModule localDateTimeSimpleModule, JacksonProperties jacksonProperties) {
var objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
objectMapper.registerModule(localDateTimeSimpleModule);
objectMapper.setDateFormat(new SimpleDateFormat(jacksonProperties.getDateFormat()));
return objectMapper;
}
}