微服务 | Springboot整合Config+Nacos实现分布式配置中心

前言

公司的所有cloud微服务项目,目前都是在配置文件中配置了多套环境的配置文件,然后在启动时指定配置文件来加载启动。这样虽说可以,但是十分不便捷。在项目启动后,不能动态的修改配置参数,如果修改配置信息,只能通过重启服务器来实现。

介绍

在这里插入图片描述

可以看到整个结构包括三个部分,客户端(各个微服务应用),服务端(中介者),配置仓库(可以是本地文件系统或者远端仓库,包括git,svn等)。

  • 配置仓库中放置各个配置文件(.yml 或者.properties)
  • 服务端指定配置文件存放的位置
  • 客户端指定配置文件的名称

这中结构配置进行集中化管理,因为是分布式应用,当修改某个应用的配置的时候,就不需要到该应用中去修改相关的配置,并且修改之后还有重启应用,相对来说很麻烦。当迁移仓库的位置时,只需要修改server中的配置即可,Client中无需进行任何修改。
并且spring cloud config还支持热更新,当你修改了配置文件中的配置,通过post: http://hostname:port/actuator/refresh 到server 应用操作,可以实现配置热更新,当Client中的类使用了@RefreshScope 注解,那么该类再次使用时,新更改的配置会生效。

项目结构

在这里插入图片描述

1、依赖

1.1、父模块依赖
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-boot.version>2.6.11</spring-boot.version>

    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>


            <!--springcloudalibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.0.4.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--nacos-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>2021.0.4.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

1.2、子模块依赖
  <dependencies>
        <!--config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- spring boot starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--Nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--mybatis-plus-->
        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--MySQL-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
        </dependency>
    </dependencies>

2、配置文件

1、bootstrap.yml
spring:
  application:
    name: nacos-config-client #默认,如果配置中心有则读取配置中心的
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #将Nacos服务作为注册中心
      config:
        server-addr: localhost:8848 #将Nacos作为配置中心
        file-extension: yaml #指定yaml格式的配置
2、application.yaml
spring:
  profiles:
    active: dev  #激活开发环境的配置文件
server:
  port: 3355
3、controller
@RestController()
@RefreshScope//nacos配置文件动态刷新 
@RequestMapping("/config")
public class ConfigController {
    @Value("${spring.application.name}")
    private String name;
    @Resource
    private TestServiceImpl testService;

    /**
     * 测试远程获取配置文件
     * @return
     */
    @GetMapping("/getname")
    public String getName(){
        return name;
    }
    
     /**
     * 获取集合列表
     * @return
     */
    @GetMapping("/getlist")
    public List<Test> getList(){
        return testService.list();
    }
}

@RefreshScope:nacos配置文件动态刷新 ,如不加此注解每次修改nacos中的配置文件需要重启服务。

4、界面端

在这里插入图片描述

DataID:DataId 默认使用 spring.application.name 配置跟文件扩展名结合(配置格式默认使用 yaml)

dataid配置默认使用服务应用名称

在这里插入图片描述

浏览器访问:输出的是配置中心的

5、踩坑记录

1、boot版本高于2.4,bootstrap文件不生效,导致启动报错

解决方案:

@SpringBootApplication
@EnableDiscoveryClient
public class Config_3001 {
    public static void main(String[] args) {
        //解决bootstrap.yml 文件找不到问题 boot版本高于2.4
        System.setProperty("spring.cloud.bootstrap.enabled", "true");
        SpringApplication.run(Config_3001.class, args);
    }
}

6、整合MyBatisPlus

修改Nacos中的配置文件

spring:
  application:
    name: nacos-config-server
    # 配置数据源
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/index_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
# 配置mybatis-plus
mybatis-plus:
  type-aliases-package: com.example.demo.entity
  mapper-locations: classpath:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

浏览器访问:localhost:3355/config/getlist

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值