kotlin 1.3的版本已经被最新的idea标记为弃用。在单独打开一个分模块工程,居然给我看这个
Kotlin: Language version 1.3 is no longer supported; please, use version 1.4
最后只能这样临时解决
如果在2.3.7提升kotlin版本,会收到kotlin/collections/MapsKt的错误。应该是1.4删掉会移动了一个类。
生版本是一个很好的选择。
spring cloud alibaba 官方的版本推荐
虽然很早就标注了2.4.2和spring cloud2020.0.1的支持,但是在阿里自身的初始化项目网站,如果选了2.4.2,nacos直接的灰了。
于是,我们需要了解版本差异。
最终我们需要适配的版本
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>11</java.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<spring.cloud-version>2020.0.1</spring.cloud-version>
<spring.boot-version>2.4.2</spring.boot-version>
<spring.cloud-alibaba-version>2021.1</spring.cloud-alibaba-version>
<kotlin.version>1.4.31</kotlin.version>
</properties>
解决方法:
一 、 重新引入bootstrap的支持
2.4.2弃用了bootstrap,允许可以重新引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
配置上稍微发生了一点变化是spring-application-name配置服务名称的需要改为
spring:
cloud:
nacos:
discovery:
service: appname
二、弃用ribbon 引入loadbalancer
2.4.2弃用了ribbon采用了loadbalancer,如果你直接调nacos的负载均衡,它会告诉你找不到。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
loadbalancer 依然适用之前的@LoadBalanced的注解。
@Configuration
public class WebClientConfig {
@LoadBalanced
@Bean
public WebClient.Builder clientBuilder() {
return WebClient.builder();
}
}
但是个人推荐使用
@Autowired
private LoadBalancedExchangeFilterFunction lbFunction;
使用时根据内外网初始化
WebClient.builder().filter(lbFunction).build()
WebClient.create()