文章目录
前言
自定义配置主要包含两个方面,一个是通用配置,另一个是扩展配置。
一、通用配置
前面我们已经有了提供者和消费者两个服务,这里两个服务先共同使用同一个数据库,我们把它定义到公共配置中。
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 测试结果
总结
这两种用法给我的感觉是差不多,主要是应对不同的使用场景。