1、动态数据源新增不重启动态刷新接口

2、增加线上104配置文件
This commit is contained in:
1378012178@qq.com 2025-10-13 15:11:58 +08:00
parent 31a03f9fca
commit b47bebd731
6 changed files with 530 additions and 30 deletions

View File

@ -0,0 +1,24 @@
package com.nu.modules.commonutils;
import org.jeecg.modules.data.loader.DataSourceLoader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 系统工具
*/
@RestController
@RequestMapping("/api/sysUtils")
public class SysUtilsApi {
@Autowired
private DataSourceLoader dataSourceLoader;
@PostMapping("/refreshDS")
public String refresh() {
dataSourceLoader.refreshDataSources();
return "数据源已刷新";
}
}

View File

@ -122,6 +122,7 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/api/ocr/**", "anon");//TODO 待删除 运维也删 阿里云证件识别 filterChainDefinitionMap.put("/api/ocr/**", "anon");//TODO 待删除 运维也删 阿里云证件识别
filterChainDefinitionMap.put("/api/baseInfo/**", "anon");//获取系统中信息 filterChainDefinitionMap.put("/api/baseInfo/**", "anon");//获取系统中信息
filterChainDefinitionMap.put("/sys/common/open/static/**", "anon");//获取本地文件资源 filterChainDefinitionMap.put("/sys/common/open/static/**", "anon");//获取本地文件资源
filterChainDefinitionMap.put("/api/sysUtils/refreshDS", "anon");//刷新数据源
filterChainDefinitionMap.put("/sys/getLoginQrcode/**", "anon"); //登录二维码 filterChainDefinitionMap.put("/sys/getLoginQrcode/**", "anon"); //登录二维码
filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //监听扫码 filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //监听扫码

View File

@ -3,6 +3,7 @@ package org.jeecg.modules.data.loader;
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.creator.DataSourceProperty; import com.baomidou.dynamic.datasource.creator.DataSourceProperty;
import com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator; import com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.data.util.SecurityUtil; import org.jeecg.modules.data.util.SecurityUtil;
import org.jeecg.modules.data.entity.DataSourceEntity; import org.jeecg.modules.data.entity.DataSourceEntity;
@ -12,6 +13,9 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
@ -27,11 +31,50 @@ public class DataSourceLoader {
refreshDataSources(); refreshDataSources();
} }
// public void refreshDataSources() {
// DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
// DataSource mainDataSource = ds.getDataSource("devops");
//
// // 从主数据源读取配置
// List<DataSourceEntity> configs = new JdbcTemplate(mainDataSource).query(
// "SELECT id, code, name, db_type, db_driver, db_url, db_name, db_username ,db_password ,sys_org_code FROM sys_data_source",
// (rs, rowNum) -> new DataSourceEntity(
// rs.getString("id"),
// rs.getString("code"),
// rs.getString("name"),
// rs.getString("db_type"),
// rs.getString("db_driver"),
// rs.getString("db_url"),
// rs.getString("db_name"),
// rs.getString("db_username"),
// rs.getString("db_password"),
// rs.getString("sys_org_code")
// )
// );
//
// // 创建并添加数据源
// configs.forEach(config -> {
// DataSourceProperty dataSourceProperty = new DataSourceProperty();
// dataSourceProperty.setUrl(config.getDbUrl());
// dataSourceProperty.setUsername(config.getDbUsername());
// String dbPassword = SecurityUtil.jiemi(config.getDbPassword());
// dataSourceProperty.setPassword(dbPassword);
// dataSourceProperty.setDriverClassName(config.getDbDriver());
// DataSource dynamicDataSource = dataSourceCreator.createDataSource(dataSourceProperty);
// ds.addDataSource(config.getCode(), dynamicDataSource);
// });
// }
public void refreshDataSources() { public void refreshDataSources() {
DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource; DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource;
DataSource mainDataSource = ds.getDataSource("devops");
// 从主数据源读取配置 // 1. 从固定的主数据源 devops读取最新的动态数据源配置
DataSource mainDataSource = ds.getDataSource("devops"); // 必须是静态配置的不能被动态删除
if (mainDataSource == null) {
log.error("无法获取主数据源 'devops',刷新动态数据源失败!");
return;
}
List<DataSourceEntity> configs = new JdbcTemplate(mainDataSource).query( List<DataSourceEntity> configs = new JdbcTemplate(mainDataSource).query(
"SELECT id, code, name, db_type, db_driver, db_url, db_name, db_username ,db_password ,sys_org_code FROM sys_data_source", "SELECT id, code, name, db_type, db_driver, db_url, db_name, db_username ,db_password ,sys_org_code FROM sys_data_source",
(rs, rowNum) -> new DataSourceEntity( (rs, rowNum) -> new DataSourceEntity(
@ -48,17 +91,33 @@ public class DataSourceLoader {
) )
); );
// 创建并添加数据源
configs.forEach(config -> {
DataSourceProperty dataSourceProperty = new DataSourceProperty();
dataSourceProperty.setUrl(config.getDbUrl());
dataSourceProperty.setUsername(config.getDbUsername());
String dbPassword = SecurityUtil.jiemi(config.getDbPassword());
dataSourceProperty.setPassword(dbPassword);
dataSourceProperty.setDriverClassName(config.getDbDriver());
DataSource dynamicDataSource = dataSourceCreator.createDataSource(dataSourceProperty);
ds.addDataSource(config.getCode(), dynamicDataSource);
});
}
// 2. 新增或更新
for (DataSourceEntity config : configs) {
String code = config.getCode();
if (code == null || code.isEmpty()) {
log.warn("跳过无效数据源配置code 为空): {}", config);
continue;
}
try {
DataSourceProperty prop = new DataSourceProperty();
prop.setUrl(config.getDbUrl());
prop.setUsername(config.getDbUsername());
prop.setPassword(SecurityUtil.jiemi(config.getDbPassword()));
prop.setDriverClassName(config.getDbDriver());
DataSource newDs = dataSourceCreator.createDataSource(prop);
ds.addDataSource(code, newDs); // 如果已存在会先 close 旧的再替换DynamicRoutingDataSource 内部逻辑
log.info("已添加/更新动态数据源: {}", code);
} catch (Exception e) {
log.error("创建/更新数据源失败code={}", code, e);
}
}
log.info("动态数据源同步完成。当前动态数据源列表: {}",
ds.getDataSources().keySet().stream()
.filter(name -> !name.equals("master"))
.collect(Collectors.toList()));
}
} }

View File

@ -2,13 +2,11 @@ package com.nu.modules.elderinfo.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nu.dto.ElderInfoMQDto; import com.nu.dto.ElderInfoMQDto;
import com.nu.dto.EmployeesApplyMQDto;
import com.nu.entity.ElderInfoEntity; import com.nu.entity.ElderInfoEntity;
import com.nu.entity.ElderServerEntity; import com.nu.entity.ElderServerEntity;
import com.nu.modules.elder.api.IElderInfoApi; import com.nu.modules.elder.api.IElderInfoApi;
@ -18,15 +16,11 @@ import com.nu.modules.elderinfo.service.IElderInfoService;
import com.nu.modules.eldermofifyinfo.entity.ElderModifyInfo; import com.nu.modules.eldermofifyinfo.entity.ElderModifyInfo;
import com.nu.modules.eldermofifyinfo.service.IElderModifyInfoService; import com.nu.modules.eldermofifyinfo.service.IElderModifyInfoService;
import com.nu.modules.nubaseinfo.api.INuBaseInfoApi; import com.nu.modules.nubaseinfo.api.INuBaseInfoApi;
import com.nu.modules.sysconfig.ISysConfigApi;
import com.nu.utils.RabbitMQUtil; import com.nu.utils.RabbitMQUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.system.vo.LoginUser;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.commons.util.IdUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Field; import java.lang.reflect.Field;

View File

@ -0,0 +1,411 @@
server:
port: 8085
tomcat:
max-swallow-size: -1
error:
include-exception: true
include-stacktrace: ALWAYS
include-message: ALWAYS
servlet:
context-path: /biz104
compression:
enabled: true
min-response-size: 1024
mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*
management:
endpoints:
web:
exposure:
include: metrics,jeecghttptrace
spring:
application:
name: nursing-unit-104
config:
import:
- optional:nacos:${spring.application.name}.yaml # 你的服务专属配置
- optional:nacos:common-db.yaml
cloud:
nacos:
discovery:
server-addr: nacos:8848 # 直接写死IP或保留${config.server-addr}
namespace: public
group: DEFAULT_GROUP
config:
server-addr: nacos:8848
namespace: public
group: DEFAULT_GROUP
file-extension: yaml
# flyway配置
flyway:
# 是否启用flyway
enabled: false
# 编码格式默认UTF-8
encoding: UTF-8
# 迁移sql脚本文件存放路径官方默认db/migration
locations: classpath:flyway/sql/mysql
# 迁移sql脚本文件名称的前缀默认V
sql-migration-prefix: V
# 迁移sql脚本文件名称的分隔符默认2个下划线__
sql-migration-separator: __
# 避免带${}sql执行失败
placeholder-prefix: '#('
placeholder-suffix: )
# 迁移sql脚本文件名称的后缀
sql-migration-suffixes: .sql
# 迁移时是否进行校验默认true
validate-on-migrate: true
# 当迁移发现数据库非空且存在没有元数据的表时自动执行基准迁移新建schema_version表
baseline-on-migrate: true
# 是否关闭要清除已有库下的表功能,生产环境必须为true,否则会删库,非常重要!!!
clean-disabled: true
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
mail:
# 定时任务发送邮件
timeJobSend: false
host: smtp.163.com
username: jeecgos@163.com
password: ??
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
## quartz定时任务,采用数据库方式
quartz:
job-store-type: jdbc
initialize-schema: embedded
#定时任务启动开关true-开 false-关
auto-startup: true
#延迟1秒启动定时任务
startup-delay: 1s
#启动时更新己存在的Job
overwrite-existing-jobs: true
properties:
org:
quartz:
scheduler:
instanceName: MyScheduler
instanceId: AUTO
jobStore:
class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_
isClustered: false
misfireThreshold: 12000
clusterCheckinInterval: 0 #心跳检查 之前是15000
acquireTriggersWithinLock: false # 减少锁竞争
threadPool:
class: org.quartz.simpl.SimpleThreadPool
threadCount: 10
threadPriority: 5
threadsInheritContextClassLoaderOfInitializingThread: true
#json 时间戳统一转换
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
jpa:
open-in-view: false
aop:
proxy-target-class: true
#配置freemarker
freemarker:
# 设置模板后缀名
suffix: .ftl
# 设置文档类型
content-type: text/html
# 设置页面编码格式
charset: UTF-8
# 设置页面缓存
cache: false
prefer-file-system-access: false
# 设置ftl文件路径
template-loader-path:
- classpath:/templates
template_update_delay: 0
# 设置静态文件路径js,css等
mvc:
static-path-pattern: /**
#Spring Boot 2.6+后映射匹配的默认策略已从AntPathMatcher更改为PathPatternParser,需要手动指定为ant-path-matcher
pathmatch:
matching-strategy: ant_path_matcher
resource:
static-locations: classpath:/static/,classpath:/public/
autoconfigure:
exclude:
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
- org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
allow:
web-stat-filter:
enabled: true
dynamic:
druid: # 全局druid参数绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 1000
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 3600000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters去掉后监控界面sql无法统计'wall'用于防火墙
filters: stat,wall,slf4j
# 允许SELECT语句的WHERE子句是一个永真条件
wall:
selectWhereAlwayTrueCheck: false
# 打开mergeSql功能慢SQL记录
stat:
merge-sql: true
slow-sql-millis: 5000
datasource:
master:
url: jdbc:mysql://mysql8-prod:3306/nursing_unit_004?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: root
password: AceijtC5kn7CWroE
driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置-运维系统
devops:
url: jdbc:mysql://121.36.88.64:47236/nu_devops?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: fw8864sshdang
password: uGDBkM25I6nZCNM2
driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置-运维系统
ope:
url: jdbc:mysql://121.36.88.64:47236/nursing_unit?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: fw8864sshdang
password: uGDBkM25I6nZCNM2
driver-class-name: com.mysql.cj.jdbc.Driver
#redis 配置
redis:
database: 1
host: redis
port: 6379
password: uUgrUus4JAYuwxzo
rabbitmq:
host: 121.36.88.64
prot: 5672
username: hldy
password: SJ+lhRn6nZ43KeXE
virtual-host: hldy
#mybatis plus 设置
mybatis-plus:
mapper-locations: classpath*:org/jeecg/**/xml/*Mapper.xml,classpath*:com/nu/**/xml/*Mapper.xml
global-config:
# 关闭MP3.0自带的banner
banner: false
db-config:
#主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)";
id-type: ASSIGN_ID
# 默认数据库表下划线命名
table-underline: true
configuration:
# 这个配置会将执行的sql打印出来在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 返回类型为Map,显示null对应的字段
call-setters-on-nulls: true
#jeecg专用配置
minidao:
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
jeecg:
# AI集成
ai-chat:
enabled: true
model: deepseek-chat
apiKey: ??
apiHost: https://api.deepseek.com
timeout: 60
# 平台上线安全配置
firewall:
# 数据源安全 (开启后Online报表和图表的数据源为必填)
dataSourceSafe: false
# 低代码模式dev:开发模式prod:发布模式——关闭所有在线开发配置能力)
lowCodeMode: dev
# 签名密钥串(前后端要一致,正式发布请自行修改)
signatureSecret: dd05f1c54d63749eda95f9fa6d49v442a
#签名拦截接口
signUrls: /sys/dict/getDictItems/*,/sys/dict/loadDict/*,/sys/dict/loadDictOrderByValue/*,/sys/dict/loadDictItem/*,/sys/dict/loadTreeData,/sys/api/queryTableDictItemsByCode,/sys/api/queryFilterTableDictInfo,/sys/api/queryTableDictByKeys,/sys/api/translateDictFromTable,/sys/api/translateDictFromTableByKeys,/sys/sendChangePwdSms,/sys/user/sendChangePhoneSms,/sys/sms,/desform/api/sendVerifyCode
# 本地local、Miniominio、阿里云alioss
uploadType: local
# 前端访问地址
domainUrl:
pc: http://localhost:3100
app: http://localhost:8051
path:
#文件上传根目录 设置
upload: /opt/biz/upFiles104
#webapp文件路径
webapp: /opt/biz104/webapp
shiro:
excludeUrls: /test/jeecgDemo/demo3,/test/jeecgDemo/redisDemo/**,/bigscreen/category/**,/bigscreen/visual/**,/bigscreen/map/**,/jmreport/bigscreen2/**
#阿里云oss存储和大鱼短信秘钥配置
oss:
accessKey: ??
secretKey: ??
endpoint: oss-cn-beijing.aliyuncs.com
bucketName: jeecgdev
# 短信模板
sms-template:
# 签名
signature:
# 模板code
templateCode:
# 登录短信、忘记密码模板编码
SMS_175435174:
# 修改密码短信模板编码
SMS_465391221:
# 注册账号短信模板编码
SMS_175430166:
# 在线预览文件服务器地址配置
file-view-domain: http://fileview.jeecg.com
# minio文件上传
minio:
minio_url: http://minio.jeecg.com
minio_name: ??
minio_pass: ??
bucketName: otatest
#大屏报表参数设置
jmreport:
#多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增)
saasMode:
# 平台上线安全配置(v1.6.2+ 新增)
firewall:
# 数据源安全 (开启后不允许使用平台数据源、SQL解析加签并且不允许查询数据库)
dataSourceSafe: false
# 低代码开发模式dev:开发模式prod:发布模式—关闭在线报表设计功能分配角色admin、lowdeveloper可以放开限制
lowCodeMode: dev
#xxl-job配置
xxljob:
enabled: false
adminAddresses: http://127.0.0.1:9080/xxl-job-admin
appname: ${spring.application.name}
accessToken: ''
address: 127.0.0.1:30007
ip: 127.0.0.1
port: 30007
logPath: logs/jeecg/job/jobhandler/
logRetentionDays: 30
#分布式锁配置
redisson:
address: 127.0.0.1:6379
password:
type: STANDALONE
enabled: true
# 百度开放API配置
baidu-api:
app-id: ??
api-key: ??
secret-key: ??
# ElasticSearch 6设置
elasticsearch:
cluster-name: jeecg-ES
cluster-nodes: 127.0.0.1:9200
check-enabled: false
#cas单点登录
cas:
prefixUrl: http://cas.example.org:8443/cas
#Mybatis输出sql日志
logging:
level:
org.flywaydb: debug
org.jeecg.modules.system.mapper: info
com.nu.modules.system.mapper: info
#swagger
knife4j:
#开启增强配置
enable: true
#开启生产环境屏蔽
production: false
basic:
enable: false
username: jeecg
password: jeecg1314
#第三方登录
justauth:
enabled: true
type:
GITHUB:
client-id: ??
client-secret: ??
redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/github/callback
WECHAT_ENTERPRISE:
client-id: ??
client-secret: ??
redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_enterprise/callback
agent-id: ??
DINGTALK:
client-id: ??
client-secret: ??
redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/dingtalk/callback
WECHAT_OPEN:
client-id: ??
client-secret: ??
redirect-uri: http://sso.test.com:8080/jeecg-boot/sys/thirdLogin/wechat_open/callback
cache:
type: default
prefix: 'demo::'
timeout: 1h
#tplink登录信息
tplink:
tums:
url: https://121.36.88.64:8888
username: admin
password: Bl20230518
ftp:
ip: 1.92.152.160
port: 21
username: administrator
password: Root@123..
uploadpath: /
#zmy
aliyun:
ocr:
accessKeyId: LTAI5tMoCTt4sb9VQrcnZFsb
accessKeySecret: pQBMT6TlUWgRfvvDnOu0IKVYXCfKee
#文件传输秘钥
downloadkey: hP2K9Z!WLuj"M#8,
# 微信支付
wxpay:
# APIv3密钥
api-v3-key: asdfiuzwe3534565478WETDSAFRWEq1E
# APPID
appid: wx53bc8a44e780d26a
# appsecret
appsecret: 7dfcbf80cb4ff379454a3d6b1f8bd61f
# 商户ID
mch-id: 1717618860
# 商户API证书序列号
mch-serial-no: 3E51C9D24F64CE50E9273E544561D29684AB21C7
# 接收结果通知地址
notify-domain: https://www.focusnu.com/nursingunit104/weiXinPay/callback
# 商户私钥文件路径
private-key-path: /opt/biz/apiclient_key.pem
nu:
org:
#试验机构信息
master:
code: 101

31
pom.xml
View File

@ -163,17 +163,17 @@
<version>${commonmark.version}</version> <version>${commonmark.version}</version>
</dependency> </dependency>
<!-- Nacos 服务发现 --> <!-- Nacos 服务发现 -->
<dependency> <!-- <dependency>-->
<groupId>com.alibaba.cloud</groupId> <!-- <groupId>com.alibaba.cloud</groupId>-->
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<version>2021.0.5.0</version> <!-- <version>2021.0.5.0</version>-->
</dependency> <!-- </dependency>-->
<!-- Nacos 配置中心--> <!-- Nacos 配置中心-->
<dependency> <!-- <dependency>-->
<groupId>com.alibaba.cloud</groupId> <!-- <groupId>com.alibaba.cloud</groupId>-->
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
<version>2021.0.5.0</version> <!-- <version>2021.0.5.0</version>-->
</dependency> <!-- </dependency>-->
<!-- RabbitMQ--> <!-- RabbitMQ-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@ -506,5 +506,16 @@
<profile.name>uat103</profile.name> <profile.name>uat103</profile.name>
</properties> </properties>
</profile> </profile>
<profile>
<id>uat104</id>
<activation>
<!--默认激活配置-->
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<!--当前环境-->
<profile.name>uat104</profile.name>
</properties>
</profile>
</profiles> </profiles>
</project> </project>