最近因口罩事件,也被“阳"了。自己在宿舍,闲来无事。整理下Nacos的注册中心的知识点。
模块:
1.父工程(管理版本)
2.公共模块:Common-API
3.测试模块:NacosClientConfigConsumer80
版本:
springboot:2.7.6
springcloud:2021.0.5
spring-cloud-alibaba-dependencies:2021.0.1.0
nacos:2.1.2
##父工程pox.ml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qwy</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>EurekaServer7001</module>
<module>Common-API</module>
<module>EurekaServer7002</module>
<module>EurekaClientProvider8001</module>
<module>EurekaClientConsumer80</module>
<module>EurekaClientProvider8002</module>
<module>ZookeeperClientProvider8001</module>
<module>ZookeeperClientProvider8002</module>
<module>ZookeeperClientConsumer80</module>
<module>ConsulClientProvider8001</module>
<module>ConsulClientProvider8002</module>
<module>ConsulClientConsumer80</module>
<module>NacosClientProvider8001</module>
<module>NacosClientProvider8002</module>
<module>NacosClientConsumer80</module>
<module>NacosClientConifgProvider8001</module>
<module>NacosClientConfigConsumer80</module>
</modules>
<!--表明是父工程-->
<packaging>pom</packaging>
<!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>2.2.2</mybatis.spring.boot.version>
<mybatis.plus.boot.version>3.5.2</mybatis.plus.boot.version>
</properties>
<!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!-- <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>2.7.6</version>
</dependency>-->
<!--spring boot 2.7.6-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 2021.0.5-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2021.0.1.0-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
公共模块Common-API
参照(四)springcloud之Nacos注册服务与发现-1
测试模块NacosClientConfigConsumer80
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.qwy</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>NacosClientConfigConsumer80</artifactId>
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--cloud新版本默认将bootstrap移除了,所以需要添加如下依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos-client-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.qwy</groupId>
<artifactId>Common-API</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.20</version>
</dependency>
<!--注意新版必须加入负载均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
</project>
注意添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--cloud新版本默认将bootstrap移除了,所以需要添加如下依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
新版版本删除了bootstrap.yml的加载,如果想使用需要手动导入对应的依赖。
application.yml
server:
port: 80
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mydb2
username: root
password: admin
bootstrap.xml
spring:
application:
name: nacos-client-config-consumer #应用程序的名称
cloud:
nacos:
config:
file-extension: yaml #配置文件的后缀
name: nacos-client-config-consumer-dev.yaml # 对应data-id(注:没必要和应用程序名一致,建议一致)
group: CONSUMER_CONFIG_GROUP # 配置文件所在的组
namespace: f370eb7e-8cb4-4ae4-975f-87423bfa9e45 #配置文件所在的命名空间
shared-configs: #配置共享配置信息
- data-id: application-common.yml
group: CONSUMER_CONFIG_GROUP
refresh: true #设置可以自动刷新
- data-id: application-custom.yml
group: CONSUMER_CONFIG_GROUP
refresh: false #设置不可以自动刷新
discovery: # 服务的注册与发现
cluster-name: JN # 应用程序所在的集群
namespace: f370eb7e-8cb4-4ae4-975f-87423bfa9e45 #服务所在的命名空间(注:没必要非得跟配置文件在同一个命名空间)
profiles:
active: dev
配置示意图:
图-1:创建命名空间
图-2:选择对应的命名空间创建配置信息
图-3:配置信息对应关系: data-id,group,后缀
图-4:命名空间的对应关系
图-5:共享配置信息-1
图-6:共享信息-2
图-7:注册与发现
注:需要启动服务
图-8:查看集群
主启动类:
package com.qwy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author:齐
* @Package:PACKAGE_NAME
* @Project:springcloud1
* @name:NacosClientConfigConsumer80
* @Date:2022/12/15 1:49
* @Filename:NacosClientConfigConsumer80
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosClientConfigConsumer80 {
public static void main(String[] args) {
SpringApplication.run(NacosClientConfigConsumer80.class,args);
}
}
controller类
package com.qwy.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @Author:齐
* @Package:com.qwy.controller
* @Project:springcloud1
* @name:OrderController
* @Date:2022/12/11 4:15
* @Filename:OrderController
*/
@RestController
@RefreshScope //自动刷新
@RequestMapping("/config")
public class ConfigController {
@Value("${pattern.dateformat}")
private String dateformat;
@Value("${common.info}")
private String commonInfo;
@Value("${custom.info}")
private String customInfo;
@GetMapping("/now")
public String now(){
String message="时间:"+LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat))
+"<br/>系统共享信息:"+commonInfo
+"<br/>用户共享信息:"+customInfo;
return message;
}
}
web浏览器访问
修改配置信息
再次访问web
最后注意:如果是老版本,配置跟这里不一样,且在配置使文件的后缀必须是yaml,新版修补了这个bug