# Springboot 引入 Nacos ( Windows 版)

作者: (opens new window)编程导航星球 (opens new window) 编号 14255

首先要了解在 Springboot 中只支持那些 Springboot 的版本(我真的被这个搞死了),可以如下图参考:

下面我们就开始吧

# 下载 Nacos

nacos 下载地址 (opens new window),这里可以选择你要下载的版本,我选择下载了2.2.2,在下载的时候根据自己的电脑选择合适的压缩包

我这里演示 windows 版本

下载好以后就可以解压,放到一个无中文的目录(千万)

然后点开nacos目录到达bin目录里面就是可运行的文件了。

如果想要单节点运行(一般我们自己学习都是单节点,但是默认启动多节点就会报错),请运行下列命令:

.\startup.cmd -m standalone
1

命令的运行是在 bin 目录下,如果无权限,请用管理员的终端再次尝试。

启动好后:

点击上图出现的网址可以进入(如果要输入密码默认都是nacos):




# Springboot 中引入

# 引入依赖管理

这个依赖管理包含了 Springboot 的版本,springcloud 的版本,springalibabacloud 的版本。引入依赖管理是便于后期加入依赖的时候不用关注版本本身,只需要把依赖引入就好了。

我这里 springboot 的版本是 2.6.11(请严格按照开始的那张图对应版本)

在你的 pom.xml 文件中引入:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2021.0.4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2021.0.4.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>

</dependencyManagement>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 引入使用的依赖

我们是要使用的是 nacos 的服务注册,所以我们引入 discovery 的启动包,以及要想启动我们要引入 springcloud 的 bootstrap 包。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
1
2
3
4
5
6
7
8

# 在 application.yml 中填写配置

这里主要就是配置 nacos 服务器的地址,以及配置我们整个服务的名称。

spring:
  application:
    name: nacos-config-example
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
1
2
3
4
5
6
7

# 在启动类中添加允许发现的注解

其实就是注解 @EnableDiscoveryClient

直接看代码

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

}
1
2
3
4
5
6
7
8
9



然后重新启动就可以啦

说明:在SpringBoot 2.4.x的版本之后,对于bootstrap.properties/bootstrap.yaml配置文件 (opens new window)(我们合起来成为Bootstrap配置文件)的支持,需要导入如下的依赖。由于SpringCloud 2020.*以后的版本默认禁用了bootstrap,导致读取配置文件时读取不到该属性。

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
1
2
3
4

# 使用

注意:在 Spring Cloud Nacos 2021 以后就没有在默认使用 Ribbon 作为负载均衡器了,而且在Cloud官网中也推荐使用LoadBalancer 作为负载均衡器,对此先引入依赖:

<!--loadbalancer负载均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency> 
1
2
3
4
5

建立一个类似的工程,前面的引入过程一致。

最终在使用的时候如下:

package com.xwhking.orderservice.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@RequestMapping("/order")
public class TestController {
    @Resource
    private RestTemplate restTemplate;


    @Resource
    private LoadBalancerClient loadBalancerClient;

    @GetMapping("/test/{id}")
    public String getTest(@PathVariable("id") String id){
        String url = "http://userservice/user/getOne/"+id;
        ServiceInstance serviceInstance = loadBalancerClient.choose("userservice");
        url = serviceInstance.getUri().toString()+"/user/getOne/"+id;
        String result1 = restTemplate.getForObject(url, String.class);
        return result1+"\n";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

好文推荐:SpringBoot2.6.11 + Spring Cloud Alibaba + Nacos 搭建 - MyDistance - 博客园 (cnblogs.com) (opens new window)

如果有这些错误提示:

  • org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set
  • 或者启动不了,按这篇文章来一遍,几乎都可以啦
最近更新: 12/15/2023, 2:04:22 PM
编程导航   |