kotlin 1.3的版本已经被最新的idea标记为弃用。在单独打开一个分模块工程,居然给我看这个

Kotlin: Language version 1.3 is no longer supported; please, use version 1.4

最后只能这样临时解决
kotlin版本过低解决方法
如果在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()
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐