【第11章】Spring Cloud之Nacos自定义配置


前言

自定义配置主要包含两个方面,一个是通用配置,另一个是扩展配置。


一、通用配置

前面我们已经有了提供者和消费者两个服务,这里两个服务先共同使用同一个数据库,我们把它定义到公共配置中。

1. 数据库初始化

create database cloud;
CREATE USER 'cloud'@'%' IDENTIFIED BY 'cloud';
GRANT ALL PRIVILEGES ON cloud.* TO 'cloud'@'%';
FLUSH PRIVILEGES;

2. 公共配置文件

之前的SpringBoot专栏有写,请查看这里,主要介绍下有区别的地方。

base-common.yaml
在这里插入图片描述

3. 使用通用配置

server:
  port: 9000
spring:
  application:
    name: provider-service
  cloud:
    nacos:
      config:
        file-extension: yaml
        server-addr: ${NACOS_SERVER_ADDR}
        namespace: ${NACOS_NAMESPACE}
        username: ${NACOS_USERNAME}
        password: ${NACOS_PASSWORD}
        shared-configs[0]:
            # 配置支持共享的 Data Id
            data-id: base-common.yaml
              # 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
            group: DEFAULT_GROUP
              # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
            refresh: true

4. 测试

4.1 测试类

package org.example.nacos.provider.controller;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Create by zjg on 2024/7/20
 */
@RestController
public class TestController {
    @Autowired
    private DruidDataSource dataSource;
    @GetMapping(value = "/getDatabase")
    public String getDatabase() throws SQLException {
        Connection conn = dataSource.getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT DATABASE()"); // MySQL 示例
        String dbName = null;
        if (rs.next()) {
            dbName = rs.getString(1);
            System.out.println("Database Name: " + dbName);
        }
        rs.close();
        stmt.close();
        return dbName;
    }
}

4.2 测试结果

在这里插入图片描述

二、扩展配置

运行了一段时间之后,数据库资源开始逐渐紧张,消费者项目组就不乐意了,我什么身份,他什么地位,和我用同一个数据库,必须给我单独开一个,这里我们就用扩展配置单独给消费者配置一套数据源连接信息。

1. 数据库初始化

create database consumer;
CREATE USER 'consumer'@'%' IDENTIFIED BY 'consumer';
GRANT ALL PRIVILEGES ON consumer.* TO 'consumer'@'%';
FLUSH PRIVILEGES;

2.扩展配置文件

ext-consumer.yaml
在这里插入图片描述

3. 使用扩展配置

server:
  port: 9003
spring:
  application:
    name: consumer-service
  cloud:
    nacos:
      config:
        file-extension: yaml
        server-addr: ${NACOS_SERVER_ADDR}
        namespace: ${NACOS_NAMESPACE}
        username: ${NACOS_USERNAME}
        password: ${NACOS_PASSWORD}
        extension-configs[0]:
          # 配置支持共享的 Data Id
          data-id: ext-consumer.yaml
          # 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
          group: DEFAULT_GROUP
          # 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
          refresh: true

4. 输出

4.1 测试类

package org.example.nacos.consumer.controller;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Create by zjg on 2024/7/20
 */
@RestController
public class TestController {
    @Autowired
    private DruidDataSource dataSource;
    @GetMapping(value = "/getDatabase")
    public String getDatabase() throws SQLException {
        Connection conn = dataSource.getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT DATABASE()"); // MySQL 示例
        String dbName = null;
        if (rs.next()) {
            dbName = rs.getString(1);
            System.out.println("Database Name: " + dbName);
        }
        rs.close();
        stmt.close();
        return dbName;
    }
}

4.2 测试结果

在这里插入图片描述


总结

回到顶部
官方文档

这两种用法给我的感觉是差不多,主要是应对不同的使用场景。

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值