springboot项目集成Nacos配置中心实现配置化和动态刷新,
优势:配置文件外部化,支持多环境配置管理,修改配置只需重启服务,无需发版。
劣势:系统庞大时,配置文件很多,多人开发,配置格式不统一,维护麻烦;敏感配置不需要暴露给开发人员,降低风险,但开发经常要和运维沟通怎么修改配置,沟通不恰当容易引发生产事故;而且,如果应用部署在多台机器,对运维来说,修改配置也是非常头疼的事情(当然也可以引入NFS系统来解决一部分问题)。
新建springboot项目
pom文件
<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.clown</groupId><artifactId>clown</artifactId><version>0.0.1-SNAPSHOT</version><name>clown</name><description>Demo project for Spring Boot</description><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><exclusions><exclusion><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency><!--SECURITY--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2 --><dependency><groupId>org.springframework.security.oauth</groupId><artifactId>spring-security-oauth2</artifactId><version>2.5.0.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></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></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-test</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</version></dependency><!--json工具--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.9</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><!-- nacos --><dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>${latest.version}</version></dependency><dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-discovery-spring-boot-starter</artifactId><version>${latest.version}</version></dependency></dependencies><properties><java.version>1.8</java.version><latest.version>0.2.10</latest.version></properties><build><finalName>clown</finalName><resources><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes><filtering>false</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.*</include></includes><excludes><exclude>**/*.java</exclude></excludes><filtering>false</filtering></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
配置文件
server:port: 8080spring:application:name: clowndatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: ${clown.datasource.url}username: ${clown.datasource.username}password: ${clown.datasource.password}nacos:config:# 主配置服务器地址server-addr: 127.0.0.1:8848discovery:server-addr: 127.0.0.1:8848# 主配置 data-id# data-id: clown-dev.yaml# 主配置 group-id# group: DEFAULT_GROUP# 主配置 namespace# namespace: clown# 主配置 配置文件类型# type: yaml# 主配置 最大重试次数# max-retry: 10# 主配置 开启自动刷新# auto-refresh: true# 主配置 重试时间# config-retry-time: 3000# 主配置 配置监听长轮询超时时间# config-long-poll-timeout: 46000# 主配置 开启注册监听器预加载配置服务(除非特殊业务需求,否则不推荐打开该参数)# enable-remote-sync-config: truelogging:level:default: debug
启动器
package com.clown;import com.alibaba.nacos.api.config.ConfigType;import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;/*** @author xq*/@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,})@NacosPropertySource(dataId = "clown", type = ConfigType.YAML, autoRefreshed = true)public class ClownApplication {public static void main(String[] args) {SpringApplication.run(ClownApplication.class, args);}}
注册Nacos
package com.clown.common.config;import com.alibaba.nacos.api.annotation.NacosInjected;import com.alibaba.nacos.api.exception.NacosException;import com.alibaba.nacos.api.naming.NamingService;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;/*** 公共配置** @author xq* @date 2022年05月09日 11:42*/@Configurationpublic class NacosConfig {@Value("${server.port}")private int serverPort;@Value("${spring.application.name}")private String applicationName;@NacosInjectedprivate NamingService namingService;@PostConstructpublic void registerInstance() throws NacosException {namingService.registerInstance(applicationName, "127.0.0.1", serverPort);}}
启动项目
验证
测试接口
package com.clown.system.controller;import javax.servlet.http.HttpServletResponse;import com.alibaba.nacos.api.config.annotation.NacosValue;import com.clown.common.config.TestNameConfig;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.io.File;import java.util.ArrayList;import java.util.List;/*** @author clown*/@RestController@RequestMapping("/test")public class TestController {@NacosValue(value = "${clown.test.name}", autoRefreshed = true)private String name;@GetMapping("/getName")public String getName() {return name;}}
访问接口

没有问题,配置成功加载
通过Nacos控制台修改配置(项目不用重启,保持运行就可以):

修改完成后,点击发布》确认发布
再次访问接口

内容改变,Nacos配置中心的基本使用完成!

