目录
接上文SpringBoot+SpringCloud,这篇文章将注册中心由consul换成了Nacos。
下载Nacos
下载地址: https://github.com/alibaba/nacos/releases
注意:下载的是2.3.2版本,其它版本可能会出现错误
下载完之后,可以将文件解压在系统盘中。
进入到conf目录下,打开application.properties文件。
将application.properties中的以下内容进行替换。
nacos.core.auth.enabled=true
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:example}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:example}
然后进入到bin目录下,使用cmd命令,输入windows命令
startup.cmd -m standalone
出现以下界面,就说明Nacos启动成功了。
输入网址:localhost:8848/nacos 用户名和密码都是nacos。
登录成功后,就可以进入主页了。
将注册中心替换成Nacos
在父项目中导入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
替换依赖
首先需要删除spring-cloud-starter-consul-discovery依赖,然后添加下面的两个依赖。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.3</version>
</dependency>
修改配置文件
将原本cloud下的consul换成nacos,namespace为命名空间,需要自己在nacos中创建。不同的namespace表示不同的环境,通常环境中包括数据库连接等一些配置信息。通过使用namespace命名空间,我们可以将不同环境的配置和服务隔离,避免相互打扰。
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos的服务器的地址和端口
namespace: 21c3a300-eade-4505-b33a-98f06e1055fb #需要进行替换
username: nacos
password: nacos
创建命名空间
根据下面的操作,创建命名空间,然后复制自动生成的命名空间ID放在yml文件的namespace中。
到这里,注册中心就从consul换成nacos了,启动项目,可以看到服务列表会有相应的项目了。
将项目中的配置放入Nacos中统一管理
我们需要将每一个子模块的yml文件中的内容放入Nacos中的配置中心统一管理。
新建配置
进入创建配置的页面
点击发布后,可以看见配置列表中就有了我们刚刚发布的文件了。这样子Nacos中就有了我们子模块mall-product需要的application.yml文件,此时我们只需要每次去Nacos中读取即可,不需要在子模块中写一个application.yml文件了。但是要去读取Nacos中的配置文件,我们需要创建一个bootstrap.yml文件(文件名不可更改,是约定好的),通过这个文件帮助我们去读取Nacos中的配置文件。
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
创建bootstrap.yml文件
在resource下创建bootstrap.yml文件
spring:
application:
name: mall-product # 服务名
cloud:
nacos:
config:
username: nacos
password: nacos
server-addr: localhost:8848 #nacos的服务器的地址和端口
namespace: 21c3a300-eade-4505-b33a-98f06e1055fb
file-extension: yaml
group: test-mall #分组的名字
profiles:
active: dev #命名空间的名字
此时可以将application.yml文件删除,重新启动项目,可以看到项目mall-product依然被注入到服务列表中了,说明读取Nacos中的配置文件成功。
配置共享
首先我们需要考虑的是application.yml文件中哪些配置是重复的,我们可以将这些配置单独写一个application.yml文件,就不需要在子模块的application.yml文件中重复书写了。
nacos-register
将nacos的配置信息单独配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos的服务器的地址和端口
namespace: 21c3a300-eade-4505-b33a-98f06e1055fb
username: nacos
password: nacos
mybatis-plus
将数据库连接和mybatis-plus的配置信息单独配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mall?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
hikari:
connection-timeout: 6000
maximum-pool-size: 5
# jackson:
# date-format: yyyy-MM-dd HH:mm:ss
# time-zone: GMT+8
# serialization:
# write-dates-as-timestamps: false
mybatis-plus:
configuration:
#开启驼峰功能,数据库字段hello_world 实体类helloWorld 也能对应匹配
map-underscore-to-camel-case: true
#结果集自动映射(resultMap)
auto-mapping-behavior: full
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath*:mapping/*Mapper.xml
global-config:
# 逻辑删除配置
db-config:
# 删除前
logic-not-delete-value: 1
# 删除后
logic-delete-value: 0
删除mall-product中重复配置
将mall-product中的mybatis-puls、数据库连接、nacos注册信息删除。
在bootstrap添加配置信息
在config中添加shared-configs属性,填写配置文件对应的Data-Id和Group,重启项目即可。
spring:
application:
name: mall-product # 服务名
cloud:
nacos:
config:
username: nacos
password: nacos
server-addr: localhost:8848 #nacos的服务器的地址和端口
namespace: 21c3a300-eade-4505-b33a-98f06e1055fb
file-extension: yaml
group: test-mall #分组的名字
shared-configs:
- data-id: nacos-register.yaml #web模块的配置文件名称 即dataId
group: test-mall
refresh: true # 是否动态刷新
- data-id: mybatis-plus.yaml #web模块的配置文件名称 即dataId
group: test-mall
refresh: true # 是否动态刷新
profiles:
active: dev #命名空间的名字