本节主要将如何将springBoot、springCloud等项目的配置文件部署nacos,以实现对配置文件进行一个统一的管理。企业项目多以nacos进行项目配置管理。
这节同时也是给实现docker+nacos+mysql+Boot/Cloud打下基础。
1 nacos本地安装
1.1 下载路径
直接通过官网进行下载:Nacos Server 下载 | Nacos 官网
nacos的版本有很多,对于不同的版本可能会有略微的不同,可以根据实际的使用情况进行选择下载。
本次选择的版本是:v1.4.6。
1.1.1 点击链接到达官网
选择发布历史。
1.1.2 下拉找到版本(演示选择v1.4.6)
点击直接下载压缩包,等待下载完成解压。
1.2 解压配置数据库
在进行这一步,需要先把数据库(MYSQL)环境安装配置好,这个可以去自行学习。
在对nacos启动之前需要进行数据库的配置,主要用于存储对nacos进行操作时所产生的数据或者配置文件信息等。
将文件解压后,可以移动到想要存储的地方。打开目录如下图:
1.2.1 利用cmd完成数据库处理
第一步:找到/conf/nacos-mysql.sql文件里的sql脚本,打开编辑,在开头处加入如下内容:
DROP DATABASE IF EXISTS `nacos_config`;
CREATE DATABASE `nacos_config` DEFAULT character set utf8mb4;
SET names utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `nacos_config`;以下是对这段 SQL 语句的解释:
`DROP DATABASE IF EXISTS `nacos_config`;`:如果存在名为“nacos_config”的数据库,则删除该数据库。这一步是为了确保在创建新的数据库之前,没有同名的旧数据库存在,避免可能的冲突。
`CREATE DATABASE `nacos_config` DEFAULT character set utf8mb4;`:创建一个名为“nacos_config”的数据库,并设置默认字符集为 utf8mb4。utf8mb4 字符集可以支持更多的字符,包括一些特殊字符和 emoji 等。
`SET names utf8mb4;`:设置当前会话的字符集为 utf8mb4。这确保在后续的操作中,数据的存储和读取都使用这个字符集。
`SET FOREIGN_KEY_CHECKS = 0;`:关闭外键检查。这在某些情况下可以加快数据库的操作速度,尤其是在进行大量数据导入或结构调整时。
`USE `nacos_config`;`:选择使用刚刚创建的“nacos_config”数据库,后续的 SQL 操作将在这个数据库上进行。
第二步:打开cmd窗口, 登录数据库,导入该SQL文件
mysql -uroot -proot
source D:\nacos\nacos\conf\nacos-mysql.sql
执行成功后,可以进行查询,查询如下图:(表示导入数据库成功)
第三步:打开/conf/application.properties里打开默认配置,并基于你当前环境配置要连接的数据库,连接数据库时使用的用户名和密码(假如前面有"#"要将其去掉):连接本地数据库。
### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
添加完成后,保存退出即可完成数据库的配置。
1.2.2 手动实现数据库创建(利用到数据库可视化工具:Navicat Premium Lite 17)
第一步:利用Navicat Premium Lite 17连接本地数据库,然后创建一个数据库,库名为:nacos_config (这个可以自定义,修改application.properties不搞错就行)。如下图:这是我创建的数据库名为:nacos_docker ,不会有影响
第二步:把直接把/conf/application.properties里面的内容复制出来,在nacos_config数据库下建立查询,并将复制的内容粘贴到查询,并执行查询实现表的创建。如图所示:
运行后将会创建需要的表。
第三步:这一步和 1.2.1 利用cmd完成数据库处理 的第三步相同。
2 nacos 本地启动
2.1 设置启动模式
nacos的启动模式有单机部署()和集群搭建()两种模式,本次主要以单机部署模式进行启动,集群搭建模式在本地直接启动会报错,就不进行过的的讲解了
2.2.1 单机部署(standalone)
第一种启动方式:在目录:\bin 下打开cmd 命令提示符,执行下面语句。
startup.cmd -m standalone
第二种启动方式:打开 \bin\startup.cmd 进行编译,修改如图:
MODE="cluster" 修改为 MODE="standalone"
修改完成后,保存,直接点击 startup.cmd 启动即可。
启动界面如下:(复制地址在浏览器打开即可)
2.2 启动界面介绍
复制链接在浏览器打开后,可能需要登录进行(登录账号和密码默认:nacos)也可能直接进入主要界面,根据实际情况进行操作。
登录界面:
主界面:
2.3 创建命名空间
要将项目连接到nacos需要一个具有唯一表示的命名空间,相关的配置都将部署在这个命名空间下面,命名空间创建如下:
创建成功后可以在命名空间列表看到刚刚创建的命名空间,如图:命名空间ID 就是项目连接nacos的关键。
列表中的配置数,就是在命名空间下面创建的配置文件数。
2.4 创建配置文件
在完成命名空间的创建后,就可以进行配置文件的创建了,配置文件查看如图:(配置文件在讲了springboot/springcloud 项目配置连接nacos时在演示创建)
3 创建Boot或者Cloud项目
项目的具体创建就不进行过多的讲解,下面主要说一下需要导入的包和注意事项。
演示项目结构如图:(需要注意的已经用红框显示)
3.1 pom.xml 导入相关的包
在导包时,需要注意包的版本和项目的版本是否兼容,这个需要自行查询一下。
要连接nacos,需要导入nacos-discovery和nacos-config两个nacos的包。
本次的项目版本是:2.1.6.RELEASE
<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.1.6.RELEASE</spring-boot.version> </properties>
导入 nacos-discovery 的版本是:2.1.4.RELEASE
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.4.RELEASE</version> </dependency>
spring-cloud-starter-alibaba-nacos-discovery
是一个 Spring Cloud Alibaba 的依赖项,主要用于集成 Nacos 服务发现功能。Nacos 是一个动态服务发现和配置管理平台,允许微服务应用程序发现彼此并进行注册。
discovery:主要用于服务注册与发现。使用 Nacos,服务提供者可以将自己的服务信息(如地址、端口等)注册到 Nacos 注册中心,而服务消费者可以从注册中心查询可用的服务实例。这样,微服务之间能够很方便地进行通信。
导入 nacos-config 的版本是: 2.1.4.RELEASE
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.4.RELEASE</version> </dependency>config:通过 Nacos,可以集中管理应用的配置,支持动态配置和热更新,简化了配置的管理和维护工作。
个人通俗理解(不喜勿喷,轻点喷):
nacos-discovery:用于被nacos发现,并进行识别,相当于进行登录验证。
nacos-config:用于管理配置资源,相当于登录后,对该账号文件图片进行管理。
连接nacos,这两个配置都需要导入。
补充导入:可能会因为项目版本的原因无法识别 bootstrap.yml 类的文件,所以可以提前导入包:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.1.2</version> </dependency>
spring-cloud-starter-bootstrap
主要是用来增强 Spring Boot 应用程序的配置处理能力,尤其是在使用 Spring Cloud 时,它对于微服务间的配置管理和初始化至关重要。
具体的pom.xml 文件内容如下,有一些是 包是测试项目需要导的,个人可以根据实际情况进行导入,看情况选择对应的包,下面的内容仅提供参考。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xjj</groupId>
<artifactId>file_ata_processing</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>file_ata_processing</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.1.6.RELEASE</spring-boot.version>
</properties>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.2</version>
</dependency>
<!-- MyBatis Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version> <!-- 根据实际情况选择版本 -->
</dependency>
<!-- MySQL 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version> <!-- 根据实际情况选择版本 -->
</dependency>
<!--lombok⼯具-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- MyBatis Plus 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version> <!-- 根据实际情况选择版本 -->
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
<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>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
3.2 bootstrap 配置文件准备
因为已经使用nacos,所以我们项目的配置文件都可以放到nacos上面,以便快速管理等。因此,bootstrap.yml ,bootstrap-xjj.yml 都只是用于配置nacos的连接或启动的对应的开发环境(生成环境,开发环境等)
创建两个yml文件,bootstrap.yml ,bootstrap-xjj.yml,如图所示:
bootstrap.yml内容:
spring: main: allow-bean-definition-overriding: true application: name: file_ata_processing profiles: active: xjj这段代码是具体含义如下:
1. spring: 此部分用于配置 Spring 框架的相关设置。
main: 这个部分里面的设置与 Spring Boot 的主应用程序相关。
allow-bean-definition-overriding: 设为 `true` 允许 Bean 定义的重写,这意味着如果有多个同名 Bean 定义,后定义的会覆盖前面的。这在某些场景下(如测试或集成)可能是有用的。
2. application: 主要用于设置应用的属性。name: 应用的名称,这里设置为 `file_ata_processing`。这是一个用于标识应用的简短字符串。(注意:这个名称要和在nacos上面添加配置文件时的名称一致,用于识别)
3. profiles: 这部分用于配置 Spring 的环境特性。
active: 指定当前激活的配置文件,这里是 `xjj`,表示应用会加载与测试环境相关的配置。(表示启动bootstrap后面xjj的配置文件)。
bootstrap-xjj.yml内容
bootstrap-xjj.yml内容:
spring: cloud: nacos: discovery: server-addr: localhost:8848 namespace: 5152f121-08be-42a1-b769-df300f3e0f28 auto-register: true config: server-addr: localhost:8848 file-extension: yml namespace: 5152f121-08be-42a1-b769-df300f3e0f28 #公共配置文件 shared-configs: file_ata_processing.yml
spring.cloud.nacos.discovery: 配置与 Nacos 服务发现相关的设置。
- server-addr: 指定 Nacos 服务器的地址,这里是
localhost:8848
,表示 Nacos 服务运行在本地的 8848 端口。(默认是8848接口)- namespace: 指定 Nacos 的命名空间,用于隔离不同的服务和配置。这里使用的是一个 UUID 形式的命名空间。(这里填的就是在nacos创建命名空间时生成的命名空间ID)(根据自身创建的命名空间,修改ID)
- auto-register: 设为
true
表示应用会自动向 Nacos 注册自己,从而使 Nacos 知道这个服务的存在,其他服务可以通过 Nacos 发现它。spring.cloud.nacos.config: 配置与 Nacos 配置中心相关的设置。
- server-addr: 指定 Nacos 配置中心的地址,这里也是
localhost:8848
,与服务发现的配置相同。- file-extension: 配置文件的扩展名,这里是
yml
,表示使用 YAML 格式的配置文件。(配置文件是yml文件)- namespace: 配置中心使用的命名空间,必须与服务发现中指定的命名空间一致。用于隔离不同的配置。(这里填的就是在nacos创建命名空间时生成的命名空间ID)(根据自身创建的命名空间,修改ID)
- shared-configs: 指定共享的配置文件名。这里是
file_ata_processing.yml
,表示从 Nacos 配置中心加载这个配置文件的内容。(如果有多个项目,对应一些公共的配置,可以写在同一个文件内,统一进行读取。这里启动只有一个项目,就直接用对应的资源名称)
完成上面两个yml文件,就基本完成了连接nacos的配置。
4 在nacos上创建对应的资源文件
本测试项目连接了数据库,就将数据库的连接信息和启动端口号的配置文件放到nacos进行测试。
启动nacos,如下图,进行配置添加。(找到之前创建的test-local的命名空间,在该空间下进行添加配置文件)
点击 + 后,添加一些配置,如下图所示:
注意:
Date ID: 后缀一定要加上.yml
配置格式:YAML
当完成配置后,点击发布就可以实现配置了,可在对应列表下查看配置文件。如图:
到这里,nacos上需要进行操作的基本结束了。
注意:在 bootstrap-xjj.yml 中,要根据自身创建的命名空间ID进行填写,不要直接使用给出实例,这样将会无法连接。
5 启动项目
在项目启动之前,需要添加@SpringCloudApplication 这个注解。
注意:在项目启动前在 bootstrap-xjj.yml 中,要根据自身创建的命名空间ID进行填写,不要直接使用给出实例,这样将会无法连接。
@SpringCloudApplication
这个注解是一个复合注解,通常用于 Spring Cloud 应用程序的入口类中。它结合了以下三个注解的功能:
@SpringBootApplication
: 启用 Spring Boot 的自动配置、组件扫描和属性配置。@EnableDiscoveryClient
: 启用 Spring Cloud 服务发现客户端的功能,允许应用程序注册到服务发现服务器(如 Eureka、Nacos、Consul)并发现其他服务。@EnableCircuitBreaker
: 启用断路器功能,通常用于实现容错机制,比如使用 Hystrix 来处理服务调用的熔断和回退逻辑。这样,
@SpringCloudApplication
注解可以帮助简化配置,使得应用程序同时具备 Spring Boot 和 Spring Cloud 的功能。
项目启动后,查看启动信息,是否报错,没有报错就启动成功,报错就根据错误进行修改,以上是个人的经验,无法兼顾太多,有不懂的可以直接留言。
启动成功的部分启动信息如图:
查看启动是否成功,还可以去到 nacos 界面的服务管理->服务列表中查看刚启动的服务,如下图:(当看到有记录,就证明启动成功了)
6 测试读取数据库数据的接口
在本测试项目中,定义了接口http://localhost:3022/docker/test1,来读取数据库中某张表的条数,接口如图:
访问接口返回数据如图:(表示已经成功读取到数据库,并放回条数,证明已经实现读取nacos上面的配置,进而证明成功连接上nacos)
7 总结
以上就是项目实现连接nacos的全部过程。
上面的只是在开发过程中,总结的一些开发经验,可以根据自身的情况进行学习,如有不对,可以留言进行讨论修改。
这个只是为了实现docker+nacos+mysql框架项目的部署打下nacos方面的基础,在后面将会根据个人的经验进行完善这一个整体框架的开发。
感谢各位的支持。