springboot整合nacos的入门Demo及Nacos安装部署

 更新时间:2024年01月29日 09:40:59   作者:虚无境  
Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理,Nacos 致力于帮助您发现、配置和管理微服务,这篇文章主要介绍了springboot整合nacos的入门Demo,需要的朋友可以参考下

Nacos介绍

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

官方文档

https://nacos.io/zh-cn/docs/what-is-nacos.html

Nacos安装部署

环境依赖:

  • JDK1.8+

下载地址官网地址:
https://github.com/alibaba/nacos/releases百度网盘地址:

链接: https://pan.baidu.com/s/1Qr8Y1K92PLs1x54BR1X27A  提取码: webx

Nacos的安装部署非常简单,如果只是作为测试学习,那么只需要将下载下来的Nacos进行解压,然后到bin目录,根据当前系统运行对应的startup.cmd即可。

注:如果nacos的版本在2.2.0+以上的版本时,必须执行此变更,否则无法启动。
修改conf目录下的application.properties文件。
设置其中的nacos.core.auth.plugin.nacos.token.secret.key值,详情可查看鉴权-自定义密钥.

Nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用。

  • 集群模式 - 用于生产环境,确保高可用。

  • 多集群模式 - 用于多数据中心场景。

将下载下来的nacos包进行解压,如果是window系统,打开bin文件夹,双击运行startup.cmd即可,linux也是一样,执行 sh startup.sh 命令。

默认运行的是集群模式,如果不想使用集群,只想用单机模式,那么需要再运行的时候添加如下命令.

window:

startup.cmd -m standalone

linux:

startup.sh -m standalone

如果不想每次运行添加上述命令,那么可以修改startup.cmd或sh startup.sh脚本,修改为set MODE="standalone",示例图如下:

配置完毕之后,执行启动脚本,启动Nacos,默认地址为http://localhost:8848/nacos,账号和密码为nacos/nacos,如果不想用这个,可以在登录之后的权限控制->用户列表菜单中进行修改。

示例图如下:

Springboot整合Nacos示例

环境依赖

  • JDK1.8+
  • Springboot2.x
  • nacos2.x

官方的版本对应建议配置:

版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

但是为了防止版本问题,强烈建议Springboot的版本和nacos的版本完全一致。

maven仓库配置如下;

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.1.RELEASE</version>
		<relativePath/>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- Spring Boot Test 依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>2.2.1.RELEASE</version>
		</dependency>
		<!--日志 -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>${logback}</version>
		</dependency>
	</dependencies>

注:如果Springboot是2.4以上的版本,maven仓库需要额外增加如下依赖:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
      </dependency>

一个简单的示例

首先创建一个配置文件,配置文件用bootstrap.properties,配置信息如下:

spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
server.port=8299
spring.application.name=springboot-nacos
spring.profiles.active=dev
# nacos配置
## Nacos服务自动注册
nacos.discovery.autoRegister=true
## Nacos服务注册中心地址
spring.cloud.nacos.discovery.server-addr= http://127.0.0.1:8848
## Nacos服务配置中心地址
spring.cloud.nacos.config.server-addr= http://127.0.0.1:8848

然后再来创建一个基本的启动类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * @Author pancm
 * @Description springboot集成nacos配置中心
 * @Date  2024/1/26
 * @Param
 * @return
 **/
@SpringBootApplication
@EnableDiscoveryClient
public class App 
{
	private static final Logger logger = LoggerFactory.getLogger(App.class);
    public static void main( String[] args )
    {
    	// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
		SpringApplication.run(App.class, args);
		logger.info("程序启动成功!");
    }
}

这里我们还需要对配置是否生效进行测试,这里就创建一个Controller,然后调用接口的时候返回配置信息。@RefreshScope注解是可以进行动态刷新。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
/**
 * @Author pancm
 * @Description 官方示例文档
 * @Date  2024/1/26
 * @Param
 * @return
 **/
@RestController
@RequestMapping("config")
@RefreshScope
public class ConfigController {
    @Value("${pcm.name:pcm-1001}")
    private String name;
    @RequestMapping(value = "/getName", method = GET)
    public String getName() {
        return name;
    }
}

:这里为了防止启动失败,添加配置的时候设置一个默认值。

然后运行App,启动成功,日志信息如下:

首先我们调用接口来查看当前的配置信息,输入http://localhost:8299/config/getName,返回示例图如下,可以看到是可以获取默认的配置。

然后我们在Nacos的页面上面添加一个pcm.name的配置,并且更改配置的值,这里我们更改为pcm-2001,然后点击发布。

这里需要注意一下DataId的名称命名规则,默认的情况下dataId=prefix.file-extension,其中profix默认为${spring.application.name}file-extension默认为properties。
如果指定了spring.profile.active,那么就会变成dataId=prefix-spring.profile.active.file-extension
比如上述的项目名称为springboot-nacos,配置文件的后缀是properties,那么DataId就是springboot-nacos.properties,指定了spring.profile.active=dev,那么DataId就是springboot-nacos-dev.properties
但是我指定了spring.profile.active=dev,为什么DataId是springboot-nacos.properties也可以呢?因为这里还涉及到一个优先级的问题。

DataId有三个配置规则

  • dataId =prefix
  • dataId =prefix.file-extension
  • dataId =prefix-spring.profile.active.file-extension

他们的优先级是按照匹配的精准度来进行了,也就是如果配置多个dataId的话,那么他会匹配最相近的,也就是匹配优先级是3>2>1,这里我们也可以通过启动中的日志进行查看。

发布成功之后我们可以看到日志也进行了刷新。

然后我们再进行访问http://localhost:8299/config/getName。通过下面的示例图我们可以看到配置已经刷新为我们设置的最新配置了。

Nacos配置管理

上述示例中,我们已经完成了一个简单的获取Nacos中的配置示例,并且可以实现配置刷新。但是如果我们有多个服务使用的话,那么我们需要对配置进行区分,不建议都是用默认的public空间,因此我们还需要创建新的命名空间,如果还有分组要求(一般就是环境区分,dev、test、prod),那么我们还可以再进行创建配置时指定好group。

在nacos的命名空间菜单中,我们创建一个新的命名空间,其中命名空间ID这个保证唯一就行,默认可以不填写。

创建成功之后,我们在来创建一个新的配置并且指定分组为dev,方便我们管理。此时里面的配置内容为pcm.name =pcm-dev

创建完成之后,我们在Springboot的项目配置文件中新增如下配置:

## nacos命名空间id
spring.cloud.nacos.config.namespace= pcm-namespace--id
## 对应的分组名称
spring.cloud.nacos.config.group= dev
## 配置文件后缀名,也可以不配置,默认为properties
spring.cloud.nacos.config.fileExtension= properties

重新启动项目,查看日子,我们可以看到已经配置成功了。

然后我们在重新启动项目,http://localhost:8299/config/getName 通过下面的示例图我们可以看到配置已经是设置的命名空间配置了。

多配置文件

在使用Nacos中,有时配置太多,不想放在一个配置文件中,此时就可以使用多个配置文件来进行区分管理。

在bootstrap.properties配置文件中新增如下配置,如果后续还有新的配置,参考下列配置,递增extension-configs[0]的数值即可,比如在新增一个配置文件,那么就是extension-configs[1] = xxx.properties 这样配置就可以了。

# 新增额外配置
##额外的第一个配置文件的dataId
spring.cloud.nacos.config.extension-configs[0].data-id=pcm-dev.properties
##额外的第一个配置文件的分组
spring.cloud.nacos.config.extension-configs[0].group=dev

在nacos中新增改配置文件,然后这里添加一个新的配置pcm.age=28.

然后再ConfigController代码中新增如下接口,添加完成之后重启项目。

    @Value("${pcm.age:18}")
    private String age;
    @RequestMapping(value = "/getAge", method = GET)
    public String getAge() {
        return age;
    }

访问http://localhost:8299/config/getAge。通过下面的示例图我们可以看到配置已经生生效了。

其他

关于SpringBoot整合nacos的demo简单讲解的文章就讲解到这里了,如有不妥,欢迎指正!

到此这篇关于springboot整合nacos的入门Demo及Nacos安装部署的文章就介绍到这了,更多相关springboot整合nacos内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot项目中配置redis详细的教程

    springboot项目中配置redis详细的教程

    Redis是一种高性能的键值存储数据库,而Spring Boot是一个简化了开发过程的Java框架,这篇文章主要给大家介绍了关于springboot项目中配置redis详细的教程,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • springboot2.3.1替换为其他的嵌入式servlet容器的详细方法

    springboot2.3.1替换为其他的嵌入式servlet容器的详细方法

    这篇文章主要介绍了springboot2.3.1替换为其他的嵌入式servlet容器的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • java使用listIterator逆序arraylist示例分享

    java使用listIterator逆序arraylist示例分享

    对于列表而言,除了Iterator,还提供了一个功能更加强大的ListIterator。它可以实现逆序遍历列表中的元素。本示例将使用其逆序遍历ArrayList
    2014-02-02
  • Spring boot2X Consul如何通过RestTemplate实现服务调用

    Spring boot2X Consul如何通过RestTemplate实现服务调用

    这篇文章主要介绍了spring boot2X Consul如何通过RestTemplate实现服务调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Java8之lambda最佳实践_动力节点Java学院整理

    Java8之lambda最佳实践_动力节点Java学院整理

    在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了函数式编程的思想,我觉得优秀的程序员,有必要学习一下函数式编程的思想以开阔思路
    2017-06-06
  • 如何使用Java统计gitlab代码行数

    如何使用Java统计gitlab代码行数

    这篇文章主要介绍了如何使用Java统计gitlab代码行数,实现方式通过git脚本将所有的项目拉下来并然后通过进行代码行数的统计,需要的朋友可以参考下
    2023-10-10
  • java基于反射得到对象属性值的方法

    java基于反射得到对象属性值的方法

    这篇文章主要介绍了java基于反射得到对象属性值的方法,结合实例形式分析了java基于反射获取对象属性值的相关实现方法与操作技巧,需要的朋友可以参考下
    2017-03-03
  • Springboot自动加载配置的原理解析

    Springboot自动加载配置的原理解析

    Springboot遵循“约定优于配置”的原则,使用注解对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来,这篇文章主要给大家介绍了关于Springboot自动加载配置原理的相关资料,需要的朋友可以参考下
    2021-10-10
  • Spring boot中@Conditional和spring boot的自动配置实例详解

    Spring boot中@Conditional和spring boot的自动配置实例详解

    本文通过实例给大家介绍了Spring boot中@Conditional和spring boot的自动配置,需要的朋友可以参考下
    2018-05-05
  • Mybatis-plus实现主键自增和自动注入时间的示例代码

    Mybatis-plus实现主键自增和自动注入时间的示例代码

    这篇文章主要介绍了Mybatis-plus实现主键自增和自动注入时间的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论