Springboot 整合 Nacos 作为配置中心

Nacos官方中文文档:https://nacos.io/zh-cn/docs/quick-start.html

 

说明

阿里的官方文档比较坑,Springboot整合Nacos根本跑不起来。

在网上参考这篇文章搭建的案例:https://blog.csdn.net/xp_lx1/article/details/106063542

 

1. 案例代码

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.test</groupId>
    <artifactId>mynacos</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mynacos</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring.boot.version>2.1.0.RELEASE</spring.boot.version>
        <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
    </properties>

    <!-- 定义Srping Boot版本和alibaba cloud版本  -->
    <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>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!-- 注册中心需要引入的依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 配置中心需要引入的依赖  -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- Srping Boot 打包工具 打包成可执行的jar  -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

bootstrap.yml

这个配置文件的加载顺序优于application.yml

server:
  port: 8070
spring:
  application:
    name: service-provider
  cloud:
    nacos:
      config:
        # 配置中心地址配置
        server-addr: 123.57.128.96:8848
        # 定义配置文件后缀为.properties, dataId=${spring.application.name}-${spring.profiles.active}.properties
        file-extension: properties
        # 定义配置中心分组:
        group: dev
      discovery:
        # 注册中心地址配置
        server-addr: 123.57.128.96:8848
  profiles:
    # 定义环境为dev
    active: dev

测试类 TestController 

@RestController
@RefreshScope //需要热更新配置的类,添加该注解。
public class TestController {

    @Value(value = "${test.logo}")
    String logo;

    @RequestMapping("/logo")
    public Object getLogo() {
        return logo;
    }
}

 

2. Nacos添加项目配置

添加配置要注意:

  1. GROUP:配置分组,说明该配置所属环境,可以将开发、测试、生产环境的分组定义为:dev、test、pro。取自${spring.cloud.nacos.config.group}
  2. Data ID:项目关联配置的关键。项目启动后会根据bootstrap.yml中的配置来关键配置中心

Data ID与bootstrap.yml关系:

  1. service-provider:取自${spring.application.name}
  2. dev:取自${spring.profiles.active}
  3. properties:取自${spring.cloud.nacos.config.file-extension}

 

新建配置

 

3. 项目启动与测试

1. Nacos添加配置后,启动测试:

测试结果:读取配置正常

2. 修改配置 test.logo=99,验证配置热更新:

以下为Nacos配置变更后,控制台的实时输出

2020-12-11 15:24:59.242  INFO 40956 --- [.57.128.96_8848] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$1] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2020-12-11 15:24:59.987  INFO 40956 --- [.57.128.96_8848] c.a.c.n.c.NacosPropertySourceBuilder     : Loading nacos data, dataId: 'service-provider-dev.properties', group: 'dev'
2020-12-11 15:24:59.987  INFO 40956 --- [.57.128.96_8848] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='service-provider-dev.properties'}, NacosPropertySource {name='service-provider.properties'}]}
2020-12-11 15:24:59.990  INFO 40956 --- [.57.128.96_8848] o.s.boot.SpringApplication               : The following profiles are active: dev
2020-12-11 15:25:00.013  INFO 40956 --- [.57.128.96_8848] o.s.boot.SpringApplication               : Started application in 1.515 seconds (JVM running for 2865.009)
2020-12-11 15:25:00.131  INFO 40956 --- [.57.128.96_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [test.logo]

再次访问,配置已更新:

 

4. 注意事项,细节说明

  1. bootstrap.yml 里定义的配置文件后缀如果是properties,在Nacos新建配置时,配置格式必须也得是Properties。如果不一致,用yaml格式,那会读取不到配置。
  2. @RefreshScope 注解必须添加到有热刷新需求的类上,而不能加到启动类上。我猜这样做的目的是,防止配置全局热刷新,而只给需要的配置刷新。

 

5. 关闭Nacos

关闭Nacos服务后,控制台并没有异常输出,项目访问也正常。配置中心挂了并不影响已启动项目的运行,至此验证结束。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值