Commit f1fa1c95 authored by ckx's avatar ckx

init

parents
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea/
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
/mvnw
/mvnw.cmd
/.mvn/
.DS_Store
logs/
hs_err_pid*
replay_pid*
./target/
*.log
# ---> Java
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
\ No newline at end of file
# yd-third
1.拉取代码后将“云动系统内部依赖包.zip”解压到maven本地仓库中
2.在nacos配置中心添加配置文件: yundong-third-onpremise.properties
配置文件内容复制nacos-config目录下yundong-third-onpremise.properties的内容
#!/bin/bash
# 修改APP_NAME为云效上的应用名
APP_NAME=yundong-third
PROG_NAME=$0
ACTION=$1
APP_START_TIMEOUT=20 # 等待应用启动的时间
APP_PORT=8080 # 应用端口
HEALTH_CHECK_URL=http://127.0.0.1:${APP_PORT}/checkpreload.htm # 应用健康检查URL
HEALTH_CHECK_FILE_DIR=/home/admin/${APP_NAME}/status # 脚本会在这个目录下生成nginx-status文件
APP_HOME=/home/admin/${APP_NAME} # 从package.tgz中解压出来的jar包放到这个目录下
JAR_NAME=${APP_HOME}/yundong-third-start/target/yundong-third-start-1.0.0-SNAPSHOT.jar # jar包的名字
JAVA_OUT=${APP_HOME}/logs/start.log #应用的启动日志
# 创建出相关目录
mkdir -p ${HEALTH_CHECK_FILE_DIR}
mkdir -p ${APP_HOME}
mkdir -p ${APP_HOME}/logs
usage() {
echo "Usage: $PROG_NAME {start|stop|restart}"
exit 2
}
health_check() {
exptime=0
echo "checking ${HEALTH_CHECK_URL}"
while true
do
status_code=`/usr/bin/curl -L -o /dev/null --connect-timeout 5 -s -w %{http_code} ${HEALTH_CHECK_URL}`
if [ "$?" != "0" ]; then
echo -n -e "\rapplication not started"
else
echo "code is $status_code"
if [ "$status_code" == "200" ];then
break
fi
fi
sleep 1
((exptime++))
echo -e "\rWait app to pass health check: $exptime..."
if [ $exptime -gt ${APP_START_TIMEOUT} ]; then
echo 'app start failed'
exit 1
fi
done
echo "check ${HEALTH_CHECK_URL} success"
}
start_application() {
echo "starting java process"
nohup java -jar ${JAR_NAME} --spring.profiles.active=prod > ${JAVA_OUT} 2>&1 &
echo "started java process"
}
stop_application() {
checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
if [[ ! $checkjavapid ]];then
echo -e "\rno java process"
return
fi
echo "stop java process"
times=60
for e in $(seq 60)
do
sleep 1
COSTTIME=$(($times - $e ))
checkjavapid=`ps -ef | grep java | grep ${APP_NAME} | grep -v grep |grep -v 'deploy.sh'| awk '{print$2}'`
if [[ $checkjavapid ]];then
kill -9 $checkjavapid
echo -e "\r -- stopping java lasts `expr $COSTTIME` seconds."
else
echo -e "\rjava process has exited"
break;
fi
done
echo ""
}
start() {
start_application
health_check
}
stop() {
stop_application
}
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
;;
esac
server.port=8080
spring.application.name=yundong-third
server.servlet.context-path=/
#dubbo
#-1表示随机端口
dubbo.protocol.port=-1
dubbo.application.name=${spring.application.name}
dubbo.protocol.name=dubbo
#redis 配置
#最大连接数据库连接数,设 0 为没有限制
spring.redis.lettuce.pool.max-active=8
#最大等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.max-idle=8
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
spring.redis.lettuce.pool.max-wait=-1ms
#最小等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.shutdown-timeout=100ms
#database
default.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# MyBatis-Plus配置
mybatis-plus.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis-plus.typeAliasesPackage=com.yundong.usercenter.entity
# druid配置. 本地监控页面地址:http://localhost:8080/druid/api.html (localhost:8080替换为对应的IP和port)
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true
#database
default.datasource.url=jdbc:mysql://192.168.1.222:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
default.datasource.username=root
default.datasource.password=root
#dubbo 注册中心地址
dubbo.registry.address=nacos://192.168.1.222:8848
# dubbo服务提供者组、版本
dubbo.provider.version=1.0.0.dev
dubbo.provider.group=THIRD
# metadata dubbo服务消费者组、版本
dubbo.metadata.group.name=METADATA
dubbo.metadata.version=1.0.0.dev
# 网关路由注册相关配置
gateway.sync.open=true
dubbo.gateway.version=1.0.0.dev
dubbo.gateway.group=GATEWAY
#redis 配置
spring.redis.database=0
#spring.redis.url=redis://123456@127.0.0.1:6379
spring.redis.host=127.0.0.1
spring.redis.password=123456
spring.redis.port=6379
server.port=8080
spring.application.name=yundong-third
server.servlet.context-path=/
#dubbo
#-1表示随机端口
dubbo.protocol.port=-1
dubbo.application.name=${spring.application.name}
dubbo.protocol.name=dubbo
#redis 配置
#最大连接数据库连接数,设 0 为没有限制
spring.redis.lettuce.pool.max-active=8
#最大等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.max-idle=8
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
spring.redis.lettuce.pool.max-wait=-1ms
#最小等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.shutdown-timeout=100ms
#database
default.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# MyBatis-Plus配置
mybatis-plus.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis-plus.typeAliasesPackage=com.yundong.usercenter.entity
# druid配置. 本地监控页面地址:http://localhost:8080/druid/api.html (localhost:8080替换为对应的IP和port)
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true
#database
default.datasource.url=jdbc:mysql://192.168.1.222:3306/test?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
default.datasource.username=root
default.datasource.password=root
#dubbo
dubbo.registry.address=nacos://192.168.1.222:8848
# dubbo服务提供者组、版本
dubbo.provider.version=1.0.0.onpremise
dubbo.provider.group=THIRD
# metadata dubbo服务消费者组、版本
dubbo.metadata.group.name=METADATA
dubbo.metadata.version=1.0.0.onpremise
# 网关路由注册相关配置
gateway.sync.open=true
dubbo.gateway.version=1.0.0.onpremise
dubbo.gateway.group=GATEWAY
#redis 配置
spring.redis.database=0
#spring.redis.url=redis://123456@127.0.0.1:6379
spring.redis.host=127.0.0.1
spring.redis.password=123456
spring.redis.port=6379
\ No newline at end of file
server.port=8080
spring.application.name=yundong-third
server.servlet.context-path=/
#dubbo
#-1表示随机端口
dubbo.protocol.port=-1
dubbo.application.name=${spring.application.name}
dubbo.protocol.name=dubbo
#redis 配置
#最大连接数据库连接数,设 0 为没有限制
spring.redis.lettuce.pool.max-active=8
#最大等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.max-idle=8
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
spring.redis.lettuce.pool.max-wait=-1ms
#最小等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.shutdown-timeout=100ms
#database
default.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# MyBatis-Plus配置
mybatis-plus.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis-plus.typeAliasesPackage=com.yundong.usercenter.entity
# druid配置. 本地监控页面地址:http://localhost:8080/druid/api.html (localhost:8080替换为对应的IP和port)
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true
#database
default.datasource.url=jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
default.datasource.username=flowable
default.datasource.password=flowable
#dubbo
dubbo.registry.address=nacos://192.168.1.222:8848
# dubbo服务提供者组、版本
dubbo.provider.version=1.0.0.prod
dubbo.provider.group=THIRD
# metadata dubbo服务消费者组、版本
dubbo.metadata.group.name=METADATA
dubbo.metadata.version=1.0.0.prod
# 网关路由注册相关配置
gateway.sync.open=true
dubbo.gateway.version=1.0.0.prod
dubbo.gateway.group=GATEWAY
#redis 配置
spring.redis.database=0
#spring.redis.url=redis://123456@127.0.0.1:6379
spring.redis.host=127.0.0.1
spring.redis.password=123456
spring.redis.port=6379
\ No newline at end of file
server.port=8080
spring.application.name=yundong-third
server.servlet.context-path=/
#dubbo
#-1表示随机端口
dubbo.protocol.port=-1
dubbo.application.name=${spring.application.name}
dubbo.protocol.name=dubbo
#redis 配置
#最大连接数据库连接数,设 0 为没有限制
spring.redis.lettuce.pool.max-active=8
#最大等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.max-idle=8
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
spring.redis.lettuce.pool.max-wait=-1ms
#最小等待连接中的数量,设 0 为没有限制
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.shutdown-timeout=100ms
#database
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# MyBatis-Plus配置
mybatis-plus.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis-plus.typeAliasesPackage=com.yundong.usercenter.entity
# druid配置. 本地监控页面地址:http://localhost:8080/druid/api.html (localhost:8080替换为对应的IP和port)
# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true
#database
default.datasource.url=jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
default.datasource.username=flowable
default.datasource.password=flowable
default.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#dubbo
dubbo.registry.address=nacos://192.168.1.222:8848
# dubbo服务提供者组、版本
dubbo.provider.version=1.0.0.test
dubbo.provider.group=THIRD
# metadata dubbo服务消费者组、版本
dubbo.metadata.group.name=METADATA
dubbo.metadata.version=1.0.0.test
# 网关路由注册相关配置
gateway.sync.open=true
dubbo.gateway.version=1.0.0.test
dubbo.gateway.group=GATEWAY
#redis 配置
spring.redis.database=0
#spring.redis.url=redis://123456@127.0.0.1:6379
spring.redis.host=127.0.0.1
spring.redis.password=123456
spring.redis.port=6379
\ No newline at end of file
File added
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>central,jcenter,!rdc-releases,!rdc-snapshots</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
<servers>
<server>
<id>rdc-releases</id>
<username>${MVN_USERNAME}</username>
<password>${MVN_PASSWORD}</password>
</server>
<server>
<id>rdc-snapshots</id>
<username>${MVN_USERNAME}</username>
<password>${MVN_PASSWORD}</password>
</server>
</servers>
<profiles>
<profile>
<id>rdc</id>
<properties>
<altReleaseDeploymentRepository>
rdc-releases::default::https://packages.aliyun.com/maven/repository/2101383-release-XEoSnW/
</altReleaseDeploymentRepository>
<altSnapshotDeploymentRepository>
rdc-snapshots::default::https://packages.aliyun.com/maven/repository/2101383-snapshot-EJtGGH/
</altSnapshotDeploymentRepository>
</properties>
<repositories>
<repository>
<id>central</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>snapshots</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>rdc-releases</id>
<url>https://packages.aliyun.com/maven/repository/2101383-release-XEoSnW/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>rdc-snapshots</id>
<url>https://packages.aliyun.com/maven/repository/2101383-snapshot-EJtGGH/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>snapshots</id>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>rdc-releases</id>
<url>https://packages.aliyun.com/maven/repository/2101383-release-XEoSnW/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>rdc-snapshots</id>
<url>https://packages.aliyun.com/maven/repository/2101383-snapshot-EJtGGH/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>rdc</activeProfile>
</activeProfiles>
</settings>
<?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>
<parent>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>yundong-third-application</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>yundong-third-application</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-facade</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-domain</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-sal</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
</dependencies>
</project>
package com.yundong.third.provider;
import com.yundong.base.context.Context;
import com.yundong.base.result.Result;
import com.yundong.gateway.facade.route.enums.GatewayApiTypeEnum;
import com.yundong.gateway.register.annotation.YdcGateway;
import com.yundong.third.facade.api.TenantService;
import com.yundong.third.facade.dto.TenantDTO;
import com.yundong.third.facade.request.AddTenantRequest;
import com.yundong.third.facade.request.DeleteTenantRequest;
import com.yundong.third.facade.request.QueryTenantRequest;
import com.yundong.third.facade.request.UpdateTenantRequest;
import com.yundong.third.service.SysTenantService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
@Validated
@Component
@Service(version = "${dubbo.provider.version}", group = "${dubbo.provider.group}")
public class TenantServiceImpl implements TenantService {
@Autowired
private SysTenantService sysTenantService;
@Override
@YdcGateway(url = "user/tenant/queryTenant.json", name = "查询租户信息" ,apiType = GatewayApiTypeEnum.GLOBAL)
public Result<TenantDTO> queryTenant(Context context, @Valid @NotNull QueryTenantRequest request) {
return Result.success(this.sysTenantService.queryTenant(context,request));
}
@Override
@YdcGateway(url = "user/tenant/addTenant.json", name = "添加租户信息" ,apiType = GatewayApiTypeEnum.GLOBAL)
public Result<Void> addTenant(Context context, @Valid @NotNull AddTenantRequest request) {
this.sysTenantService.addTenant(context,request);
return Result.success();
}
@Override
@YdcGateway(url = "user/tenant/updateTenant.json", name = "更新租户信息" ,apiType = GatewayApiTypeEnum.GLOBAL)
public Result<Void> updateTenant(Context context, @Valid @NotNull UpdateTenantRequest request) {
this.sysTenantService.updateTenant(context,request);
return Result.success();
}
@Override
@YdcGateway(url = "user/tenant/deleteTenant.json", name = "删除租户信息" ,apiType = GatewayApiTypeEnum.GLOBAL)
public Result<Void> deleteTenant(Context context, @Valid @NotNull DeleteTenantRequest request) {
this.sysTenantService.deleteTenant(context,request);
return Result.success();
}
}
package com.yundong.third.service;
import com.yundong.base.context.Context;
import com.yundong.third.facade.dto.TenantDTO;
import com.yundong.third.facade.request.AddTenantRequest;
import com.yundong.third.facade.request.DeleteTenantRequest;
import com.yundong.third.facade.request.QueryTenantRequest;
import com.yundong.third.facade.request.UpdateTenantRequest;
/**
* SysTenantService
*
* @author mengmeng
* @date 2023/5/31
* @time 15:39
*/
public interface SysTenantService {
TenantDTO queryTenant(Context context, QueryTenantRequest request);
void addTenant(Context context,AddTenantRequest request);
void updateTenant(Context context, UpdateTenantRequest request);
void deleteTenant(Context context, DeleteTenantRequest request);
}
package com.yundong.third.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.yundong.base.context.Context;
import com.yundong.base.exception.BizException;
import com.yundong.third.entity.SysTenantDO;
import com.yundong.third.enums.LoggerEnums;
import com.yundong.third.facade.dto.TenantDTO;
import com.yundong.third.facade.enums.ResultCodes;
import com.yundong.third.facade.request.AddTenantRequest;
import com.yundong.third.facade.request.DeleteTenantRequest;
import com.yundong.third.facade.request.QueryTenantRequest;
import com.yundong.third.facade.request.UpdateTenantRequest;
import com.yundong.third.mapper.SysTenantMapper;
import com.yundong.third.service.SysTenantService;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Objects;
/**
* SysTenantServiceImpl
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class SysTenantServiceImpl implements SysTenantService {
private static final Logger dalLog = LoggerEnums.DAL_LOG.getLogger();
@Autowired
private SysTenantMapper sysTenantMapper;
@Override
public TenantDTO queryTenant(Context context, QueryTenantRequest request) {
// 操作数据库获取数据
SysTenantDO sysTenantDO = this.sysTenantMapper.selectById(request.getId());
TenantDTO tenantDTO = BeanUtil.copyProperties(sysTenantDO, TenantDTO.class);
dalLog.info("查询到租户信息为:" + JSON.toJSONString(tenantDTO));
return tenantDTO;
}
@Override
public void addTenant(Context context, AddTenantRequest request) {
SysTenantDO sysTenantDO = BeanUtil.copyProperties(request,SysTenantDO.class);
// 可采用枚举
sysTenantDO.setStatus(0);
sysTenantDO.setCreateBy(context.getIdentityId());
this.sysTenantMapper.insert(sysTenantDO);
}
@Override
public void updateTenant(Context context, UpdateTenantRequest request) {
SysTenantDO sysTenantDO = this.sysTenantMapper.selectById(request.getId());
if(Objects.isNull(sysTenantDO)){
throw new BizException(ResultCodes.ID_NOT_FOUND);
}
BeanUtil.copyProperties(request,sysTenantDO);
this.sysTenantMapper.updateById(sysTenantDO);
}
@Override
public void deleteTenant(Context context, DeleteTenantRequest request) {
SysTenantDO sysTenantDO = this.sysTenantMapper.selectById(request.getId());
if(Objects.isNull(sysTenantDO)){
throw new BizException(ResultCodes.ID_NOT_FOUND);
}
this.sysTenantMapper.deleteById(request.getId());
}
}
<?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>
<parent>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-domain</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>yundong-third-domain</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--springboot2.X默认使用lettuce连接池,需要引入commons-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
package com.yundong.third.config;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DruidDBConfig {
@Bean
public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() {
ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
// IP白名单 (没有配置或者为空,则允许所有访问)
registrationBean.addInitParameter("allow", "127.0.0.1");
// IP黑名单 (存在共同时,deny优先于allow)
registrationBean.addInitParameter("deny", "");
registrationBean.addInitParameter("loginUsername", "root");
registrationBean.addInitParameter("loginPassword", "1234");
registrationBean.addInitParameter("resetEnable", "false");
return registrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean() ;
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*"); // 所有请求进行监控处理
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");
return filterRegistrationBean ;
}
}
package com.yundong.third.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.Date;
@Configuration
@MapperScan("com.yundong.third.mapper")
public class MybatisPlusConfig {
@Value("${default.datasource.url}")
private String url;
@Value("${default.datasource.username}")
private String username;
@Value("${default.datasource.password}")
private String password;
@Value("${default.datasource.driver-class-name}")
private String className;
@Bean("dataSource")
public DataSource sysDataSource() {
//初始化默认数据源
DruidDataSource sysDataSource = new DruidDataSource();
sysDataSource.setUrl(url);
// sysDataSource.setUsername(EncryptUtils.decrypt(username));
// sysDataSource.setPassword(EncryptUtils.decrypt(password));
sysDataSource.setUsername(username);
sysDataSource.setPassword(password);
sysDataSource.setDriverClassName(className);
sysDataSource.setName("sysDataSource");
return sysDataSource;
}
@Bean
public MetaObjectHandler gmtCreateModifiedHandler() {
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate", new Date(), metaObject);
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
};
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
// @Override
// public Expression getTenantId() {
// return new StringValue(TenantContext.getTenant());
// }
//
// @Override
// public String getTenantIdColumn() {
// return TENANT_ID_COLUMN;
// }
//
// // 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件
// @Override
// public boolean ignoreTable(String tableName) {
// return IGNORE_TENANT_ID_TABLES.contains(tableName);
// }
// }));
// 如果用了分页插件注意先 add TenantLineInnerInterceptor 再 add PaginationInnerInterceptor
// 用了分页插件必须设置 MybatisConfiguration#useDeprecatedExecutor = false
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setMaxLimit(-1L);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}
package com.yundong.third.constants;
public class SymbolConstant {
public static final String COMMA = ",";
public static final String COLON = "\\:";
/**
* 正则点
*/
public static final String POINT_REGEX = "\\.";
/**
* STRING点
*/
public static final String POINT_STR = ".";
public static final String QUOTE = "$";
public static final String UNDERSCORE = "_";
public static final String CONSTANT_MARK = ":@@@";
public static final String ARRAY_ITEM_MARK = "*";
public static final String[] EMPTY_STRING_ARRAY = {};
public static final String BANG = "!";
public static final String BANG_EQ = "!=";
public static final String BANG_EQ_EQ = "!==";
public static final String PCT = "%";
public static final String PCT_EQ = "%=";
public static final String AMP = "&";
public static final String AMP_AMP = "&&";
public static final String AMP_AMP_EQ = "&&=";
public static final String AMP_EQ = "&=";
public static final String LPAREN = "(";
public static final String RPAREN = ")";
public static final String AST = "*";
public static final String AST_EQ = "*=";
public static final String PLUS = "+";
public static final String PLUS_PLUS = "++";
public static final String PLUS_EQ = "+=";
public static final String MINUS = "-";
public static final String MINUS_MINUS = "--";
public static final String MINUS_EQ = "-=";
public static final String COLON_COLON = "::";
public static final String SEMI = ";";
public static final String LT = "<";
public static final String LT_LT = "<<";
public static final String LT_LT_EQ = "<<=";
public static final String LT_EQ = "<=";
public static final String EQ = "=";
public static final String EQ_EQ = "==";
public static final String EQ_EQ_EQ = "===";
public static final String GT = ">";
public static final String GT_EQ = ">=";
public static final String GT_GT = ">>";
public static final String GT_GT_EQ = ">>=";
public static final String GT_GT_GT = ">>>";
public static final String GT_GT_GT_EQ = ">>>=";
public static final String QMARK = "?";
public static final String LSQUARE = "[";
public static final String RSQUARE = "]";
public static final String CARET = "^";
public static final String CARET_EQ = "^=";
public static final String LCURLY = "{";
public static final String PIPE = "|";
public static final String PIPE_EQ = "|=";
public static final String PIPE_PIPE = "||";
public static final String PIPE_PIPE_EQ = "||=";
public static final String RCURLY = "}";
public static final String TILDE = "~";
public static final String SLASH = "/";
public static final String SLASH_EQ = "/=";
public static final String CN_LSQUARE = "「";
public static final String CN_RSQUARE = "」";
}
package com.yundong.third.constants;
public class UserCenterConstant {
/**
* 相关
*/
public static final String URL = "url";
public static final String TENANT_ID = "tenantId";
public static final String IDENTITY_ID = "identityId";
public static final String COLUMN_GMT_CREATE = "gmt_create";
public static final String COLUMN_GMT_MODIFIED = "gmt_modified";
/**
* 日志最大长度,长的切掉……
*/
public static final int LOG_MAX_CONTENT_SIZE = 4096;
public static final int LOG_SML_CONTENT_SIZE = 2048;
/**
* 数据api的默认参数名
*/
public final static String REQUEST_PARAM_KEY = "params";
public final static String SORT_ITEMS_KEY = "sortItems";
public final static String DATA_KEY = "data";
public final static String PAGE_NO_KEY = "pageNo";
public final static String PAGE_NO_UNDERLINE_KEY = "page_no";
public final static String PAGE_SIZE_KEY = "pageSize";
public final static String PAGE_SIZE_UNDERLINE_KEY = "page_size";
public final static String COUNT_KEY = "_count";
public final static String DATA_COUNT_KEY = "count";
public final static String SEARCH_VALUE_PRE = "_sys_prefix:%s";
public final static String KEYWORD = "keyword";
public final static String KEY = "key";
public final static String _KEY = "_key";
public final static String _SUM = "_sum";
}
package com.yundong.third.entity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
*
* </p>
*
* @author yundong
* @since 2023-06-07
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("sys_tenant")
public class SysTenantDO implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
private Date beginDate;
private Date endDate;
private Integer status;
private String createBy;
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
private String updateBy;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
@TableLogic(value = "0",delval = "now()")
private Long isDeleted;
private String bpmInstanceStatus;
private String bpmInstanceId;
}
package com.yundong.third.enums;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public enum LoggerEnums {
/**
* 本系统作为dubbo服务提供者日志
*/
SERVICE_LOG("SERVICE_LOG"),
/**
* 本系统作为dubbo服务消费者日志
*/
SAL_LOG("SAL_LOG"),
/**
* 数据库访问相关日志
*/
DAL_LOG("SAL_LOG"),
/**
* 错误日志
*/
ERROR_LOG("ERROR_LOG");
private final Logger logger;
LoggerEnums(String name) {
this.logger = LoggerFactory.getLogger(name);
}
public Logger getLogger() {
return logger;
}
}
package com.yundong.third.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yundong.third.entity.SysTenantDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SysTenantMapper extends BaseMapper<SysTenantDO> {
}
<?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.yundong.idaas</groupId>
<artifactId>yundong-third-facade</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>yundong-third-facade</name>
<description>Demo project for Spring Boot</description>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<yundong-base.version>1.9.8</yundong-base.version>
<lombok.version>1.18.20</lombok.version>
<easyexcel.verson>2.2.6</easyexcel.verson>
</properties>
<dependencies>
<dependency>
<groupId>com.yundong</groupId>
<artifactId>yundong-base</artifactId>
<version>${yundong-base.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<version>${lombok.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.verson}</version>
</dependency>
</dependencies>
</project>
package com.yundong.third.facade.api;
import com.yundong.base.context.Context;
import com.yundong.base.result.Result;
import com.yundong.third.facade.dto.TenantDTO;
import com.yundong.third.facade.request.AddTenantRequest;
import com.yundong.third.facade.request.DeleteTenantRequest;
import com.yundong.third.facade.request.QueryTenantRequest;
import com.yundong.third.facade.request.UpdateTenantRequest;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
public interface TenantService {
Result<TenantDTO> queryTenant(Context context, @Valid @NotNull QueryTenantRequest request);
Result<Void> addTenant(Context context, @Valid @NotNull AddTenantRequest request);
Result<Void> updateTenant(Context context, @Valid @NotNull UpdateTenantRequest request);
Result<Void> deleteTenant(Context context, @Valid @NotNull DeleteTenantRequest request);
}
package com.yundong.third.facade.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class TenantDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 编码
*/
private Integer id;
/**
* 名称
*/
private String name;
private Date beginDate;
/**
* 结束时间
*/
private Date endDate;
/**
* 状态 1正常 0冻结
*/
private Integer status;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private Date gmtCreate;
/**
* 更新人
*/
private String updateBy;
/**
* 更新时间
*/
private Date gmtModified;
}
package com.yundong.third.facade.enums;
import com.yundong.base.result.ResultCode;
public class ResultCodes {
public static ResultCode ID_NOT_FOUND = new ResultCode(100001,"ID对应数据不存在","ID corresponding data does not exist");
}
\ No newline at end of file
package com.yundong.third.facade.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
@Data
public class AddTenantRequest implements Serializable {
@NotBlank(message = "name不能为空")
private String name;
@NotNull(message = "beginDate不能为空")
private Date beginDate;
@NotNull(message = "endDate不能为空")
private Date endDate;
}
package com.yundong.third.facade.request;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
public class DeleteTenantRequest implements Serializable {
@NotNull(message = "ID不能为空")
private Integer id;
}
package com.yundong.third.facade.request;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
@Data
public class QueryTenantRequest implements Serializable {
@NotNull(message = "ID不能为空")
private Integer id;
}
package com.yundong.third.facade.request;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class UpdateTenantRequest {
@NotNull(message = "ID不能为空")
private Integer id;
private String name;
private Date beginDate;
private Date endDate;
private Integer status;
}
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yundong-third-ht</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-facade</artifactId>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.0.0</version>
<exclusions>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-domain</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-sal</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-sal</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.yundong.datapaas</groupId>-->
<!-- <artifactId>search-facade</artifactId>-->
<!-- </dependency>-->
</dependencies>
<distributionManagement>
<repository>
<id>rdc-releases</id>
<name>Releases</name>
<url>https://packages.aliyun.com/maven/repository/2101383-release-XEoSnW/</url>
</repository>
<snapshotRepository>
<id>rdc-snapshots</id>
<name>Snapshots</name>
<url>https://packages.aliyun.com/maven/repository/2101383-snapshot-EJtGGH/</url>
</snapshotRepository>
</distributionManagement>
<!-- 环境 -->
<profiles>
</profiles>
</project>
package com.yundong.third.ht.api.database;
import com.yundong.base.result.Result;
import com.yundong.third.ht.api.database.dto.request.ContractCounterSignExportWordRequest;
import javax.validation.Valid;
import java.util.List;
/**
* @Author LTC
* @Date 2023-12-21 15:30
*/
public interface ContractCounterExportRequest {
Result<List<String>> ContractCounterExport(@Valid ContractCounterSignExportWordRequest request);
}
package com.yundong.third.ht.api.database;
import com.yundong.base.result.Result;
import com.yundong.third.ht.api.database.dto.request.Contract;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
public interface ContractWordServiceld {
Result<List<String>> contractWordExport(@Valid Contract request ) throws IllegalAccessException, IOException;
}
package com.yundong.third.ht.api.database;
import com.yundong.base.context.Context;
import com.yundong.base.result.Result;
/**
* @Author LTC
* @Date 2023-11-21 12:57
*/
public interface ProjectAcceptance {
Result<StringBuilder> itemSynchronization(Context context, String appId, String version, String data) throws IllegalAccessException;
}
package com.yundong.third.ht.api.database.dto.request;
import com.yundong.base.context.Context;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Setter
@Getter
public class Contract extends Context {
private String DESC1;
private String DESC3;
private String DESC13;
private String deptLeader;
private String dept;
private String depts;
private String handled_by;
private String handling_dept;
private String leader;
private List<Contract> data;
/**
*版本号
*/
private String version;
}
package com.yundong.third.ht.api.database.dto.request;
import com.yundong.base.context.Context;
import lombok.Data;
import java.util.List;
/**
* @Author LTC
* @Date 2023-12-21 14:26
*/
@Data
public class ContractCounterSignExportWordRequest extends Context {
//合同名称
private String contractName;
//对方名称
private String partyAName;
//合同金额
private String contractAmount;
//承办部门
private String undertakingDepartment;
private String undertakingUser;
private String signature;
private String date;
private String depts;
private String deptLeader;
private String successStatus;
private String leader;
private List<ContractCounterSignExportWordRequest> data;
}
package com.yundong.third.ht.api.database.impl;
import com.yundong.base.result.Result;
import com.yundong.base.service.oss.OssService;
import com.yundong.gateway.register.annotation.YdcGateway;
import com.yundong.third.ht.api.database.ContractCounterExportRequest;
import com.yundong.third.ht.api.database.dto.request.ContractCounterSignExportWordRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.dubbo.config.annotation.Service;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.Valid;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.*;
/**
* @Author LTC
* @Date 2023-12-21 15:36
*/
@Slf4j
@org.springframework.stereotype.Service
@Service(version = "${dubbo.provider.version}", group = "${dubbo.provider.group}")
public class ContractCounterExportRequestImpl implements ContractCounterExportRequest {
@Autowired
private OssService ossService;
@YdcGateway(name = "contractCounter-export", url = "biz/third/ht/database/contractExport.json")
@Override
public Result<List<String>> ContractCounterExport(@Valid ContractCounterSignExportWordRequest request) {
Result<List<String>> result = new Result<>();
List<String> fileUrls = new ArrayList<>();
for (int i = 0; i < request.getData().size(); i++) {
HashMap<String, Object> map = new HashMap<>();
map.put("contractName", StringUtils.isNotBlank(request.getData().get(i).getContractName())? request.getData().get(i).getContractName():"\u00A0");
map.put("partyAName", StringUtils.isNotBlank(request.getData().get(i).getPartyAName())?request.getData().get(i).getPartyAName():"\u00A0");
map.put("contractAmount", StringUtils.isNotBlank(request.getData().get(i).getContractAmount())?request.getData().get(i).getContractAmount():"\u00A0");
map.put("undertakingDepartment", StringUtils.isNotBlank(request.getData().get(i).getUndertakingDepartment())?request.getData().get(i).getUndertakingDepartment():"\u00A0");
map.put("undertakingUser", StringUtils.isNotBlank(request.getData().get(i).getUndertakingUser())?request.getData().get(i).getUndertakingUser():"\u00A0");
map.put("signature", StringUtils.isNotBlank(request.getData().get(i).getSignature())?request.getData().get(i).getSignature():"\u00A0");
map.put("date", StringUtils.isNotBlank(request.getData().get(i).getDate())?request.getData().get(i).getDate():"\u00A0");
map.put("leader", StringUtils.isNotBlank(request.getData().get(i).getLeader())?request.getData().get(i).getLeader():"\u00A0");
map.put("depts", StringUtils.isNotBlank(request.getData().get(i).getDepts())?request.getData().get(i).getDepts():"\u00A0");
map.put("deptLeader", StringUtils.isNotBlank(request.getData().get(i).getDeptLeader())?request.getData().get(i).getDeptLeader():"\u00A0");
map.put("successStatus", StringUtils.isNotBlank(request.getData().get(i).getSuccessStatus())?request.getData().get(i).getSuccessStatus():"\u00A0");
String fileName = "合同会签单";
String fileUrl = "";
// String relativePath = "\\yundong-third-ht\\src\\main\\resources\\word\\con_export.doc"; // 相对路径
// String currentDir = System.getProperty("user.dir");
// String filePath = currentDir + File.separator + relativePath; // 构建完整的文件路径
try {
File catchFile = File.createTempFile(UUID.randomUUID().toString(), ".doc");
try (
InputStream resource = ContractCounterExportRequestImpl.class.getClassLoader().getResourceAsStream("word/con_export.doc");
FileOutputStream fileOutputStream = new FileOutputStream(catchFile);
FileInputStream fileInputStream = new FileInputStream(catchFile);
// FileOutputStream out = new FileOutputStream("output.doc");
) {
HWPFDocument doc = new HWPFDocument(resource);
Range range = doc.getRange();
for (Map.Entry<String, Object> entry : map.entrySet()) {
range.replaceText(entry.getKey(), String.valueOf(entry.getValue()));
}
// response.setHeader("Content-disposition","attachment;filename=\""+new String(fileName.getBytes("UTF-8"),"ISO8859_1")+"\"");
// response.setContentType("application/download;charset=UTF-8");
// ServletOutputStream out = response.getOutputStream();
doc.write(fileOutputStream);
fileUrl = ossService.uploadOssObject(request.getTenantId(), System.currentTimeMillis() + "/" + fileName + ".doc", fileInputStream);
fileUrls.add(fileUrl);
}
} catch (Exception e) {
e.printStackTrace();
}
}
result.setData(fileUrls);
result.setCode(200);
result.setMessage("成功");
return result;
}
}
package com.yundong.third.ht.api.database.impl;
import com.yundong.base.context.Context;
import com.yundong.base.result.Result;
import com.yundong.gateway.register.annotation.YdcGateway;
import com.yundong.third.ht.api.database.ProjectAcceptance;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Service;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
/**
* @Author LTC
* @Date 2023-11-21 16:14
*/
@Slf4j
@org.springframework.stereotype.Service
@Service(version = "${dubbo.provider.version}", group = "${dubbo.provider.group}")
public class ContractSynchronization implements ProjectAcceptance {
@YdcGateway(name = "contract-synchronization", url = "biz/third/ht/database/contractSynchronization.json")
@Override
public Result<StringBuilder> itemSynchronization(Context context, String appId, String version, String data) throws IllegalAccessException {
String url1 = "http://10.136.208.159/esbmule/services/receive/DAM_FROM_PM_HT";
System.out.println("6666666666666666666666666666666666666666666666666666666666666666666666666666");
System.out.println(data);
try {
// 创建URL对象
URL url = new URL(url1);
// 打开连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 设置请求方法为POST
connection.setRequestMethod("POST");
// 设置请求头
connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("usercode", "YD");
connection.setRequestProperty("password", "VE6jh6ZPrp");
// 启用输出,并设置请求体
connection.setDoOutput(true);
String requestBody = data;
try (OutputStream os = connection.getOutputStream()) {
byte[] input = requestBody.getBytes(StandardCharsets.UTF_8);
os.write(input, 0, input.length);
}
// 发起请求并获取响应
int responseCode = connection.getResponseCode();
System.out.println("Response Code: " + responseCode);
// 读取响应信息
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 打印响应内容
System.out.println("Response Body: " + response.toString());
// 关闭连接
connection.disconnect();
return Result.success(response);
} catch (Exception e) {
e.printStackTrace();
}
return Result.fail("同步失败");
}
}
package com.yundong.third.ht.api.database.impl;
import cn.afterturn.easypoi.word.WordExportUtil;
import cn.afterturn.easypoi.word.entity.MyXWPFDocument;
import com.yundong.base.result.Result;
import com.yundong.base.service.oss.OssService;
import com.yundong.gateway.register.annotation.YdcGateway;
import com.yundong.third.ht.api.database.ContractWordServiceld;
import com.yundong.third.ht.api.database.dto.request.Contract;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Service;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.Valid;
import java.io.*;
import java.util.*;
@Slf4j
@org.springframework.stereotype.Service
@Service(version = "${dubbo.provider.version}", group = "${dubbo.provider.group}")
public class ContractWordServiceldImpl implements ContractWordServiceld {
@Autowired
private OssService ossService;
@YdcGateway(name = "contract-word", url = "biz/third/md/database/ContractWord.json")
@Override
public Result<List<String>> contractWordExport(@Valid Contract request ) throws IllegalAccessException, IOException {
Result<List<String>> result = new Result<>();
List<String> fileUrls = new ArrayList();
/*String str = "[{\"DESC1\":\"123\",\"DESC13\":\"浙江鑫诺检测技术有限公司\",\"DESC3\":\"123\",\"handling_dept\":\"中国能源建设集团浙江火电建设有限公司\",\"handled_by\":\"林建\",\"dept\":\"林建 2023-12-21\",\"deptLeader\":\"【林健】林健 2023-12-21 14:25:37\\n 同意\",\"depts\":\"【林健】林健 2023-12-21 14:26:01\\n同意\"},{\"DESC1\":\"4\",\"DESC13\":\"保定市方为电气制造有限公司\",\"DESC3\":\"4\",\"handling_dept\":\"林建\",\"handled_by\":\"林建\",\"dept\":\"林健 2023-12-20\",\"deptLeader\":\"【林健】林健 2023-12-21 13:46:39\\n 同意\",\"depts\":\"【林健】林健 2023-12-21 13:47:21\\n同意\\n【卢太春】卢太春 2023-12-21 13:47:56\\n同意\\n【杜文浩】杜文浩 2023-12-21 13:48:13\\n同意\\n\"}]";
JSONArray array = JSONObject.parseArray(str);*/
for(int i = 0; i < request.getData().size(); i++) {
Map<String, Object> map = new HashMap<>();
/*JSONObject item = array.getJSONObject(i);*/
String fileUrl = "";
map.put("DESC1", request.getData().get(i).getDESC1());
map.put("DESC3", request.getData().get(i).getDESC3());
map.put("DESC13", request.getData().get(i).getDESC13());
map.put("dept", request.getData().get(i).getDept());
map.put("deptLeader", request.getData().get(i).getDeptLeader());
map.put("depts", request.getData().get(i).getDepts());
map.put("handled_by", request.getData().get(i).getHandled_by());
map.put("handling_dept", request.getData().get(i).getHandling_dept());
map.put("leader", request.getData().get(i).getLeader());
/*map.put("DESC1", item.getString("DESC1"));
map.put("DESC3", item.getString("DESC3"));
map.put("DESC13", item.getString("DESC13"));
map.put("dept", item.getString("dept"));
map.put("deptLeader", item.getString("deptLeader"));
map.put("depts", item.getString("depts"));
map.put("handled_by", item.getString("handled_by"));
map.put("handling_dept", item.getString("handling_dept"));*/
try {
String fileName = "合同会签单.docx";
InputStream resource = this.getClass().getClassLoader().getResourceAsStream("word/contract.docx");
File catchFile = File.createTempFile(UUID.randomUUID().toString(), ".docx");
FileOutputStream fileOutputStream = new FileOutputStream(catchFile);
FileInputStream fileInputStream = new FileInputStream(catchFile);
XWPFDocument word = new MyXWPFDocument(resource);
WordExportUtil.exportWord07(word, map);
word.write(fileOutputStream);
/*response.setHeader("Content-disposition", "attachment;filename=\""
+ new String(fileName.getBytes("UTF-8"), "ISO8859_1") + "\"");
response.setContentType("application/download;charset=UTF-8");
OutputStream outputStream = response.getOutputStream();
word.write(outputStream);*/
//文件上传oss
fileUrl = ossService.uploadOssObject(request.getTenantId(), System.currentTimeMillis() + "/" + fileName, fileInputStream);
fileUrls.add(fileUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
result.setData(fileUrls);
result.setCode(200);
result.setMessage("成功!");
return result;
}
}
<?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>
<parent>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>yundong-third-sal</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>yundong-third-sal</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-domain</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.metadata</groupId>
<artifactId>yundong-metadata-facade</artifactId>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--springboot2.X默认使用lettuce连接池,需要引入commons-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
</dependencies>
</project>
package com.yundong.third.constants;
/**
* 常量
*
* @author xiaokang
* @date 2023/11/5 16:19
*/
public class CommonConstant {
public final static String APP_ID = "appId";
public final static String REQUEST_PARAM_KEY = "params";
public final static String DATA_KEY = "data";
public final static String COUNT_KEY = "_count";
public final static String DATA_COUNT_KEY = "count";
public final static String PAGE_NO_KEY = "pageNo";
public final static String PAGE_SIZE_KEY = "pageSize";
public final static String TOTAL = "total";
public final static String DELIMITER_SLASH = "/";
public final static int PAGE_SIZE = 10;
/**
* 试卷类型常量
*/
public final static String FIXED_PAPER = "固定试卷";
public final static String RANDOM_PAPER = "随机试卷";
/**
* 试题显示状态
*/
public final static String SHOW = "显示";
public final static String NOT_SHOW = "不显示";
/**
* 启用状态
*/
public final static String ENABLE = "启用";
public final static String DISABLE = "禁用";
/**
* 判断题状态
*/
public final static String RIGHT = "对";
public final static String WRONG = "错";
/**
* 试题状态
*/
public final static String EFFECTIVE = "有效";
public final static String INVALID = "无效";
/**
* 题目类型常量
*/
public final static String SG = "单选题";
public final static String MG = "多选题";
public final static String TF = "判断题";
public final static String FB = "填空题";
public final static String SA = "简答题";
/**
* 阅卷状态 待系统阅卷,系统阅卷完成待人工阅卷,阅卷完成
*/
public final static String WAIT_SCORE = "待系统阅卷";
public final static String WAIT_PEOPLE_SCORE = "系统阅卷完成待人工阅卷";
public final static String SCORE_FINISH = "阅卷完成";
/**
* 导出相关
*/
public static final String ERROR_REASON = "error_reason";
public static final String ERROR_REASON_CHINESE = "失败原因";
}
package com.yundong.third.constants;
/**
* @author xiaokang
* @date 2023/11/6 14:17
*/
public class DbFieldConstant {
public DbFieldConstant() {
}
public static final String ID = "id";
public static final String DATA = "data";
public static final String TENANT_ID = "tenant_id";
public static final String GMT_CREATE = "gmt_create";
public static final String GMT_MODIFIED = "gmt_modified";
public static final String CREATE_BY = "create_by";
public static final String UPDATE_BY = "update_by";
public static final String IS_DELETED = "is_deleted";
public static final String PARAMS = "params";
public static final String IS_FINAL_RESULT = "is_final_result";
public static final String STATUS = "status";
public static final String ORG_CODE = "org_code";
public static final String PAGE_SIZE = "pageSize";
public static final String PAGE_NO = "pageNo";
public static final String NULL_VALUE = "_NULL_VALUE";
public static final String IDENTITY_ID = "identity_id";
public static final String TYPE = "type";
public static final String TYPE_ID = "type_id";
public static final String PAPER_IDS = "paperIds";
public static final String STATUS_LIST = "statusList";
public static final String PUBLISH_IDS = "publishIds";
public static final String DATABASE_IDS = "databaseIds";
public static final String QUESTION_IDS = "questionIds";
public static final String ORG_CODES = "orgCodes";
public static final String SORT_ITEMS = "sortItems";
public static final String NONE_PAGE = "_NONE_PAGE";
public static final Integer BATCH_UPDATE_MAX_SIZE = 1000;
public static final String DATABASE_NAMES = "databaseNames";
}
package com.yundong.third.constants;
/**
* 查询常量
*
* @author xiaokang
* @date 2023/11/6 11:15
*/
public class QueryConstant {
public final static int PAGE_NO_1 = 1;
public final static int PAGE_SIZE_1 = 1;
public final static int PAGE_SIZE_10 = 10;
public final static int PAGE_SIZE_100 = 100;
public final static int PAGE_SIZE_200 = 200;
public final static int PAGE_SIZE_300 = 300;
public final static int PAGE_SIZE_400 = 400;
public final static int PAGE_SIZE_500 = 500;
public final static int PAGE_SIZE_1000 = 1000;
public final static int PAGE_SIZE_50 = 50;
public final static int PAGE_SIZE_20 = 20;
}
package com.yundong.third.dubbo.consumer;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yundong.base.context.Context;
import com.yundong.base.exception.BizException;
import com.yundong.base.result.Result;
import com.yundong.base.result.ResultCode;
import com.yundong.metadata.facade.ApiService;
import com.yundong.metadata.facade.dto.request.InvokeApiRequest;
import com.yundong.third.constants.UserCenterConstant;
import com.yundong.third.util.MapBuilder;
import com.yundong.third.util.QueryResult;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* 消费Metadata api service
*
* @author songke
* @date 2021/11/29 13:56
**/
@Component
public class MetadataApiServiceClient {
@Reference(check = false, group = "${dubbo.metadata.group.name}", version = "${dubbo.metadata.version}", timeout = 10000, retries = 0)
private ApiService apiService;
@Deprecated
public Object invokeApi(Context context, InvokeApiRequest request) {
Result<Object> result = apiService.invokeApi(context, request);
if (!result.isSuccess()) {
ResultCode resultCode = new ResultCode(result.getCode(), result.getMessage(), result.getArgs());
throw new BizException(resultCode);
}
return result.getData();
}
/**
* 调用meta的创建api
*/
public String invokeCreateApi(Context context, InvokeApiRequest request) {
Result<Object> result = apiService.invokeApi(context, request);
if (!result.isSuccess()) {
ResultCode resultCode = new ResultCode(result.getCode(), result.getMessage(), result.getArgs());
throw new BizException(resultCode);
}
JSONObject resultDataObj = JSON.parseObject(JSON.toJSONString(result.getData()));
return resultDataObj.getString("id");
}
/**
* 系统API请用这个
*/
public <T> QueryResult<T> invokeApiSysApi(Context context, String appId, String apiName, Map<String, Object> where, Class<T> clazz) {
InvokeApiRequest request = new InvokeApiRequest();
request.setAppId(appId);
request.setName(apiName);
request.setParams(MapBuilder.of(UserCenterConstant.REQUEST_PARAM_KEY, where));
return invokeApiResult(context, request, clazz);
}
/**
* 查询使用时请注意参数嵌套
*/
public <T> QueryResult<T> invokeApiResult(Context context, InvokeApiRequest request, Class<T> clazz) {
QueryResult<T> queryResult = new QueryResult<>();
Result<Object> result = apiService.invokeApi(context, request);
if (!result.isSuccess()) {
ResultCode resultCode = new ResultCode(result.getCode(), result.getMessage(), result.getArgs());
throw new BizException(resultCode);
}
queryResult.setSuccess(Boolean.TRUE);
JSONObject resultDataObj = JSON.parseObject(JSON.toJSONString(result.getData(), SerializerFeature.DisableCircularReferenceDetect));
if (!resultDataObj.containsKey(UserCenterConstant.DATA_KEY)) {
queryResult.setData(BeanUtil.copyProperties(resultDataObj, clazz));
return queryResult;
}
if (resultDataObj.get(UserCenterConstant.DATA_KEY) instanceof JSONArray) {
Long totalCount = resultDataObj.containsKey(UserCenterConstant.DATA_COUNT_KEY) ? resultDataObj.getLongValue(UserCenterConstant.DATA_COUNT_KEY) : resultDataObj.getJSONArray(UserCenterConstant.DATA_KEY).size();
queryResult.setCount(totalCount);
if (queryResult.getCount() > 0) {
queryResult.setList(JSON.parseArray(resultDataObj.getString(UserCenterConstant.DATA_KEY), clazz));
}
queryResult.setPageNo(resultDataObj.getIntValue(UserCenterConstant.PAGE_NO_KEY));
queryResult.setPageSize(resultDataObj.getIntValue(UserCenterConstant.PAGE_SIZE_KEY));
return queryResult;
}
if (resultDataObj.get(UserCenterConstant.DATA_KEY) instanceof JSONObject) {
queryResult.setData(JSON.parseObject(resultDataObj.getString(UserCenterConstant.DATA_KEY), clazz));
return queryResult;
}
return queryResult;
}
}
package com.yundong.third.logger;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.MDC;
import java.util.UUID;
/**
* 日志
*
* @author jiuyi
* @date 2022/3/17 20:16
*/
public class LogUtil {
public static final String TRACE_ID = "trace_id";
public static final String ARMS_TRACE_ID = "EagleEye-TraceID";
public static final String DELIMITER = "-";
public static String getArmsTraceId() {
try {
return MDC.get(ARMS_TRACE_ID);
} catch (Exception e) {
return null;
}
}
public static String generateTraceId() {
String traceId = UUID.randomUUID().toString().replace(DELIMITER, "");
MDC.put(TRACE_ID, traceId);
return traceId;
}
public static String generateTraceId(String traceId) {
if (StringUtils.isBlank(traceId)) {
traceId = UUID.randomUUID().toString().replace(DELIMITER, "");
}
MDC.put(TRACE_ID, traceId);
return traceId;
}
public static void clearTraceId() {
MDC.remove(TRACE_ID);
}
public static Logger getErrorLogger() {
return LoggerEnums.ERROR_LOG.getLogger();
}
public static LoggerFactory getLogger(Class<?> c, LoggerEnums loggerEnums) {
return new LoggerFactory(c, loggerEnums);
}
}
package com.yundong.third.logger;
/**
* 日志常量定义
*
* @author xiaokang
* @date 2023/11/5 9:07
*/
public class LoggerConst {
public static final int LOG_MAX_CONTENT_SIZE = 1024 * 16;
public static final int SAL_LOG_MAX_CONTENT_SIZE = 1024;
}
package com.yundong.third.logger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 日志常量枚举
*
* @author xiaokang
* @date 2023/11/5 9:07
*/
public enum LoggerEnums {
/**
* 业务日志
*/
EXAM_SERVICE_LOG("EXAM_SERVICE_LOG"),
/**
* 业务日志
*/
EXAM_ERROR_LOG("EXAM_ERROR_LOG"),
/**
* 错误日志
*/
ERROR_LOG("ERROR_LOG"),
SAL_LOG("SAL_LOG"),
;
private final Logger logger;
LoggerEnums(String name) {
this.logger = LoggerFactory.getLogger(name);
}
public Logger getLogger() {
return logger;
}
}
package com.yundong.third.logger;
import org.slf4j.Logger;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
/**
* 日志打印
*
* @author xiaokang
* @date 2023/11/5 9:07
*/
public class LoggerFactory {
public static final String EMPTY = "";
public static final String DELIMITER_VERTICAL = "|";
public static final String CLASS_METHOD = "%s.%s|";
public static final String EXCLUDE_CLASS_KEYWORD = "Dubbo";
private final Class<?> currentClass;
private final Logger logger;
public LoggerFactory(Class<?> tClass, LoggerEnums loggerEnums) {
this.currentClass = tClass;
logger = loggerEnums.getLogger();
}
public void error(String msg) {
logger.error(appendClassAndMethod() + msg);
}
public void error(String format, Object... args) {
logger.error(appendClassAndMethod() + format, args);
}
public void error(String format, Throwable e) {
logger.error(format, e);
}
public void warn(String format, Object... args) {
logger.warn(appendClassAndMethod() + format, args);
}
public void warn(String msg) {
logger.warn(appendClassAndMethod() + msg);
}
public void info(String format, Object... args) {
logger.info(appendClassAndMethod() + format, args);
}
public void info(String msg) {
logger.info(appendClassAndMethod() + msg);
}
private String appendClassAndMethod() {
//有人在Dubbo中用,AOP已经切过了,不需要
if (Objects.nonNull(currentClass) && !currentClass.getName().contains(EXCLUDE_CLASS_KEYWORD)) {
Optional<StackTraceElement> runClass = Arrays.stream(Thread.currentThread().getStackTrace()).filter(s -> s.getClassName().equals(currentClass.getName())).findAny();
//这里也可以打印方法入参,目前不需要
if (runClass.isPresent()) {
return String.format(CLASS_METHOD, runClass.get().getClassName(), runClass.get().getMethodName());
} else {
return currentClass.getName() + DELIMITER_VERTICAL;
}
}
return EMPTY;
}
}
package com.yundong.third.model;
import com.yundong.base.result.ResultCode;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 统一数据平台返回
*
* @author xiaokang
* @date 2023/11/5 15:36
*/
@Data
public class QueryRes<T> implements Serializable {
private List<T> list;
private T data;
private Long count;
private Integer pageNo;
private Integer pageSize;
private boolean success;
private ResultCode resultCode;
}
package com.yundong.third.util;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.text.NamingCase;
import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.yundong.third.constants.CommonConstant;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.cglib.beans.BeanCopier;
import java.nio.charset.StandardCharsets;
import java.util.*;
/**
* bean类型转换
*
* @author xiaokang
* @date 2023/11/6
*/
public class BeanConvertUtil {
public static <FROM, TO> TO convert(FROM dto, Class<FROM> fromClass, Class<TO> toClass) {
try {
if (dto == null) {
return toClass.newInstance();
}
TO newDto;
newDto = toClass.newInstance();
BeanCopier copier = BeanCopier.create(fromClass, toClass, false);
copier.copy(dto, newDto, null);
return newDto;
} catch (Exception e) {
throw new RuntimeException("can not convert", e);
}
}
public static <FROM, TO> List<TO> convert(Collection<FROM> list, Class<FROM> fromClass, Class<TO> toClass) {
try {
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>(0);
}
List<TO> newList = new ArrayList<>();
for (FROM dto : list) {
newList.add(BeanConvertUtil.convert(dto, fromClass, toClass));
}
return newList;
} catch (Exception e) {
throw new RuntimeException("can not convert", e);
}
}
public static <TO> TO deepConvert(Object source, Class<TO> toClass) {
try {
if (source == null) {
return toClass.newInstance();
}
return JSON.parseObject(JSON.toJSONString(source), toClass);
} catch (Exception e) {
throw new RuntimeException("can not deep convert", e);
}
}
public static <TO> List<TO> deepConvert(List<?> sourceList, Class<TO> toClass) {
try {
if (CollectionUtils.isEmpty(sourceList)) {
return Lists.newArrayList();
}
return JSON.parseArray(JSON.toJSONString(sourceList), toClass);
} catch (Exception e) {
throw new RuntimeException("can not deep convert", e);
}
}
/**
* 将map转成beanList
*
* @param mapList
* @param toClass
* @param <T>
* @return
*/
public static <T> List<T> mapsToList(List<Map<String, Object>> mapList, Class<T> toClass) {
if (CollectionUtils.isEmpty(mapList)) {
return new ArrayList<>(0);
}
try {
List<T> beanList = new ArrayList<>(mapList.size());
for (Map<String, Object> map : mapList) {
beanList.add(mapToBean(map, toClass));
}
return beanList;
} catch (Exception e) {
throw new RuntimeException("can not convert mapsToList", e);
}
}
public static List<Map<String, Object>> listToMaps(List<?> list) {
if (CollectionUtils.isEmpty(list)) {
return Lists.newArrayList();
}
try {
List<Map<String, Object>> mapList = new ArrayList<>(list.size());
for (Object bean : list) {
mapList.add(beanToMap(bean));
}
return mapList;
} catch (Exception e) {
throw new RuntimeException("can not convert mapsToList", e);
}
}
public static Map<String, Object> beanToMap(Object obj) {
return BeanUtil.beanToMap(obj, false, true);
}
public static Map<String, Object> beanToUnderLineMap(Object obj) {
return BeanUtil.beanToMap(obj, true, true);
}
public static <T> T mapToBean(Map<String, Object> obj, Class<T> tClass) {
return BeanUtil.toBeanIgnoreError(obj, tClass);
}
public static String listToMd5(Collection<String> list) {
CollUtil.removeBlank(list);
CollUtil.sortByPinyin(list);
String identityIdListStr = CollUtil.join(list, CommonConstant.DELIMITER_SLASH);
return DigestUtil.md5Hex(identityIdListStr.getBytes(StandardCharsets.UTF_8));
}
/**
* list转换
* @param dtoList
* @param toClass
* @return
* @param <FROM>
* @param <TO>
*/
public static <FROM, TO> List<TO> convert(Collection<FROM> dtoList, Class<TO> toClass) {
return convert(dtoList, toClass, null);
}
/**
* list属性定义
* @param dtoList
* @param toClass
* @param nameCovert
* @return
* @param <FROM>
* @param <TO>
*/
public static <FROM, TO> List<TO> convert(Collection<FROM> dtoList, Class<TO> toClass, NameCovert nameCovert) {
if (CollectionUtils.isEmpty(dtoList)) {
return new ArrayList<>(0);
}
List<TO> toDtoList = new ArrayList<>(dtoList.size());
for (FROM dto : dtoList) {
toDtoList.add(BeanConvertUtil.convert(dto, toClass, nameCovert));
}
return toDtoList;
}
/**
* bean转换
*
* @param dto
* @param nameCovert 下划线和驼峰可以对应转
* @param <FROM>
* @param <TO>
* @return
*/
public static <FROM, TO> TO convert(FROM dto, Class<TO> toClass, NameCovert nameCovert) {
if (Objects.isNull(dto)) {
return null;
}
CopyOptions copyOption = CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true).setIgnoreCase(true);
if (NameCovert.camelMatchUnderline.equals(nameCovert)) {
copyOption.setFieldNameEditor(NamingCase::toCamelCase);
}
if (NameCovert.underlineMatchCamel.equals(nameCovert)) {
copyOption.setFieldNameEditor(NamingCase::toUnderlineCase);
}
return BeanConvertUtil.convertBase(dto, toClass, copyOption);
}
private static <FROM, TO> TO convertBase(FROM dto, Class<TO> toClass, CopyOptions copyOption) {
try {
if (Objects.isNull(dto)) {
return null;
}
return BeanUtil.toBean(dto, toClass, copyOption);
} catch (Exception e) {
throw new RuntimeException("can not convert", e);
}
}
public enum NameCovert {
/**
* 源是驼峰对应目标下划线
*/
camelMatchUnderline,
/**
* 源是下划线对应目标驼峰
*/
underlineMatchCamel,
;
}
}
\ No newline at end of file
package com.yundong.third.util;
import cn.hutool.core.lang.Pair;
import com.yundong.metadata.facade.dto.SortItem;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* mapBuilder
*
* @author jiuyi
* @date 2021/12/22 9:51 PM
*/
public class MapBuilder {
public static <K, V> HashMap<K, V> EMPTY() {
return new HashMap<>(0);
}
public static <K, V> HashMap<K, V> of(K k, V v) {
final HashMap<K, V> map = new HashMap<>(2);
map.put(k, v);
return map;
}
public static <K, V> HashMap<K, V> of(K k, V v, K k2, V v2) {
final HashMap<K, V> map = new HashMap<>(4);
map.put(k, v);
map.put(k2, v2);
return map;
}
public static <K, V> HashMap<K, V> of(Pair<K, V>... pairs) {
final HashMap<K, V> map = new HashMap<>(pairs.length * 2);
for (Pair<K, V> pair : pairs) {
map.put(pair.getKey(), pair.getValue());
}
return map;
}
public static <K, V> HashMap<K, V> of(K k, V v, K k2, V v2, K k3, V v3) {
final HashMap<K, V> map = new HashMap<>(6);
map.put(k, v);
map.put(k2, v2);
map.put(k3, v3);
return map;
}
public static List<SortItem> sortOf(String fieldName, String order) {
final List<SortItem> list = new ArrayList<>(2);
SortItem sort = new SortItem();
sort.setFieldName(fieldName);
sort.setOrder(order);
list.add(sort);
return list;
}
public static List<SortItem> sortOf(String fieldName1, String order1, String fieldName2, String order2) {
final List<SortItem> list = new ArrayList<>(2);
SortItem sort1 = new SortItem();
sort1.setFieldName(fieldName1);
sort1.setOrder(order1);
SortItem sort2 = new SortItem();
sort2.setFieldName(fieldName2);
sort2.setOrder(order2);
list.add(sort1);
list.add(sort2);
return list;
}
public static List<SortItem> sortOf(String fieldName1, String order1, String fieldName2, String order2, String fieldName3, String order3) {
final List<SortItem> list = new ArrayList<>(3);
SortItem sort1 = new SortItem();
sort1.setFieldName(fieldName1);
sort1.setOrder(order1);
SortItem sort2 = new SortItem();
sort2.setFieldName(fieldName2);
sort2.setOrder(order2);
SortItem sort3 = new SortItem();
sort3.setFieldName(fieldName3);
sort3.setOrder(order3);
list.add(sort1);
list.add(sort2);
list.add(sort3);
return list;
}
}
package com.yundong.third.util;
import com.yundong.base.result.ResultCode;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 统一数据平台返回
*
* @author jiuyi
* @date 2021/12/1 3:58 下午
*/
@Data
public class QueryResult<T> implements Serializable {
private List<T> list;
private T data;
private Long count;
private Integer pageNo;
private Integer pageSize;
private boolean success;
private ResultCode resultCode;
}
FROM registry.cn-hangzhou.aliyuncs.com/XXXX/yundong-base:1.0.0
EXPOSE 8888
USER admin:admin
ENV TZ 'Asia/Shanghai'
ENV LANG="C.UTF-8"
ARG JAR_FILE
ADD ${JAR_FILE} /home/admin/app.jar
ENTRYPOINT ["java", "-jar", "/home/admin/app.jar"]
<?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>
<parent>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>yundong-third-start</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>yundong-third-start</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-sal</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-domain</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-facade</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-application</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>com.yundong.idaas</groupId>
<artifactId>yundong-third-ht</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.yundong.third.StartApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 打包跳过测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<!-- 构建镜像相关 -->
<profiles>
<profile>
<id>onpremise</id>
<properties>
<profile.name>onpremise</profile.name>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- 请替换仓库地址 -->
<repository>registry.cn-hangzhou.aliyuncs.com/XXXX/yundong-third</repository>
<dockerfile>Dockerfile</dockerfile>
<tag>1.0.0.onpremise</tag>
<!-- 镜像仓库用户名密码 -->
<username>XXX</username>
<password>XXX</password>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
package com.yundong.third;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
HibernateJpaAutoConfiguration.class })
@EnableDubbo(scanBasePackages = "com.yundong.third")
public class StartApplication {
public static void main(String[] args) {
SpringApplication.run(StartApplication.class, args);
}
}
package com.yundong.third.aop;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yundong.base.exception.BizException;
import com.yundong.base.result.Result;
import com.yundong.base.result.ResultCodes;
import com.yundong.third.enums.LoggerEnums;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.hibernate.validator.internal.engine.ConstraintViolationImpl;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import javax.validation.ConstraintViolationException;
import java.lang.reflect.Method;
import java.util.Objects;
@Aspect
@Component
public class DubboServiceAspect {
private static final Logger serviceLog = LoggerEnums.SERVICE_LOG.getLogger();
@Pointcut("execution(public * com.yundong.third.provider.*.*(..))")
public void dubboService() {
}
@Around("dubboService()")
public Object logAndHandleException(ProceedingJoinPoint jp) {
long start = System.currentTimeMillis();
Object result = null;
Throwable throwable = null;
//获取方法参数值数组
Object[] args = jp.getArgs();
Method method = ((MethodSignature) jp.getSignature()).getMethod();
String className = method.getDeclaringClass().getName();
String methodName = method.getName();
try {
result = jp.proceed();
} catch (ConstraintViolationException e) {
result = new Result<>(ResultCodes.INVALID_PARAM, this.getViolationErrorMsg(e));
} catch (BizException e) {
result = new Result<>(e.getResultCode());
} catch (Throwable t) {
// 未知异常
throwable = t;
result = new Result<>(ResultCodes.SERVER_ERROR);
} finally {
long costMs = System.currentTimeMillis() - start;
serviceLog.error("{}|{}|{}|{}|{}|{}", className, methodName, costMs, JSON.toJSONString(args, SerializerFeature.WriteMapNullValue),
JSON.toJSONString(result, SerializerFeature.WriteMapNullValue), Objects.isNull(throwable) ? "" : throwable);
}
return result;
}
private String getViolationErrorMsg(ConstraintViolationException e) {
String message = ResultCodes.INVALID_PARAM.getMessage();
try {
message = ((ConstraintViolationImpl<?>) e.getConstraintViolations().toArray()[0]).getMessage();
} catch (Throwable ignored) {
}
return message;
}
}
package com.yundong.third.aop;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.yundong.base.exception.BizException;
import com.yundong.base.result.ResultCodes;
import com.yundong.third.enums.LoggerEnums;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Objects;
@Aspect
@Component
public class SalServiceAspect {
private static final Logger salLog = LoggerEnums.SAL_LOG.getLogger();
@Pointcut("execution(public * com.yundong.third.dubbo.consumer.*.*(..))")
public void salService() {
}
@Around("salService()")
public Object logAndHandleException(ProceedingJoinPoint jp) {
long start = System.currentTimeMillis();
Object result = null;
Throwable throwable = null;
//获取方法参数值数组
Object[] args = jp.getArgs();
Method method = ((MethodSignature) jp.getSignature()).getMethod();
String className = method.getDeclaringClass().getName();
String methodName = method.getName();
try {
result = jp.proceed();
} catch (BizException e) {
throwable = e;
throw e;
} catch (Throwable t) {
// 未知异常
throwable = t;
throw new BizException(ResultCodes.SERVER_ERROR.getCode(), "三方服务异常");
} finally {
long costMs = System.currentTimeMillis() - start;
salLog.error("{}|{}|{}|{}|{}|{}", className, methodName, costMs, JSON.toJSONString(args, SerializerFeature.WriteMapNullValue),
JSON.toJSONString(result, SerializerFeature.WriteMapNullValue), Objects.isNull(throwable) ? "" : throwable);
}
return result;
}
}
# *****开发环境******
spring:
main:
allow-bean-definition-overriding: true
allow-circular-references: true
#prefix−{spring.profile.active}.${file-extension}
#nacos会根据当前环境去拼接配置名称查找相应配置文件,
#示例:{spring.application.name}-{spring.profiles.active}-{spring.cloud.nacos.config.file-extension}
#获取到值:nacos-autoconfig-service-dev.yml
#profiles:
#开发环境dev,测试环境test,生产环境prod
#active: dev
cloud:
nacos:
config:
#nacos配置中心地址
server-addr: 192.168.10.254:8848
#配置中心的命名空间id
#namespace: public
#配置分组,默认没有也可以
group: DEFAULT_GROUP
#配置文件后缀,用于拼接配置配置文件名称,目前只支持yml和properties
file-extension: properties
#配置自动刷新
refresh-enabled: true
#配置文件的前缀,默认是application.name的值,如果配了prefix,就取prefix的值
#prefix: nacos-autoconfig-service-${spring.profile.active}
# 配置编码
encode: UTF-8
application:
name: yundong-third
nacos:
config:
server-addr: 192.168.10.254:8848/
namespace:
\ No newline at end of file
# *****私有化部署环境******
spring:
main:
allow-bean-definition-overriding: true
allow-circular-references: true
#prefix−{spring.profile.active}.${file-extension}
#nacos会根据当前环境去拼接配置名称查找相应配置文件,
#示例:{spring.application.name}-{spring.profiles.active}-{spring.cloud.nacos.config.file-extension}
#获取到值:nacos-autoconfig-service-dev.yml
#profiles:
#开发环境dev,测试环境test,生产环境prod
#active: dev
cloud:
nacos:
config:
#nacos配置中心地址
server-addr: onpremise-nacos-server:8848
#配置中心的命名空间id
#namespace: public
#配置分组,默认没有也可以
group: DEFAULT_GROUP
#配置文件后缀,用于拼接配置配置文件名称,目前只支持yml和properties
file-extension: properties
#配置自动刷新
refresh-enabled: true
#配置文件的前缀,默认是application.name的值,如果配了prefix,就取prefix的值
#prefix: nacos-autoconfig-service-${spring.profile.active}
# 配置编码
encode: UTF-8
application:
name: yundong-third
nacos:
config:
server-addr: onpremise-nacos-server:8848
namespace:
\ No newline at end of file
# *****线上环境******
spring:
main:
allow-bean-definition-overriding: true
allow-circular-references: true
#prefix−{spring.profile.active}.${file-extension}
#nacos会根据当前环境去拼接配置名称查找相应配置文件,
#示例:{spring.application.name}-{spring.profiles.active}-{spring.cloud.nacos.config.file-extension}
#获取到值:nacos-autoconfig-service-dev.yml
#profiles:
#开发环境dev,测试环境test,生产环境prod
#active: dev
cloud:
nacos:
config:
#nacos配置中心地址
server-addr: prod-nacos-server:8848
#配置中心的命名空间id
# namespace:
#配置分组,默认没有也可以
group: DEFAULT_GROUP
#配置文件后缀,用于拼接配置配置文件名称,目前只支持yml和properties
file-extension: properties
#配置自动刷新
refresh-enabled: true
#配置文件的前缀,默认是application.name的值,如果配了prefix,就取prefix的值
#prefix: nacos-autoconfig-service-${spring.profile.active}
# 配置编码
encode: UTF-8
application:
name: yundong-third
nacos:
config:
server-addr: prod-nacos-server:8848
#配置中心的命名空间id
namespace:
\ No newline at end of file
# *****测试环境******
spring:
main:
allow-bean-definition-overriding: true
allow-circular-references: true
#prefix−{spring.profile.active}.${file-extension}
#nacos会根据当前环境去拼接配置名称查找相应配置文件,
#示例:{spring.application.name}-{spring.profiles.active}-{spring.cloud.nacos.config.file-extension}
#获取到值:nacos-autoconfig-service-dev.yml
#profiles:
#开发环境dev,测试环境test,生产环境prod
#active: dev
cloud:
nacos:
config:
#nacos配置中心地址
server-addr: 192.168.1.222:8848
#配置中心的命名空间id
#namespace: public
#配置分组,默认没有也可以
group: DEFAULT_GROUP
#配置文件后缀,用于拼接配置配置文件名称,目前只支持yml和properties
file-extension: properties
#配置自动刷新
refresh-enabled: true
#配置文件的前缀,默认是application.name的值,如果配了prefix,就取prefix的值
#prefix: nacos-autoconfig-service-${spring.profile.active}
# 配置编码
encode: UTF-8
application:
name: yundong-third
nacos:
config:
server-addr: 192.168.1.222:8848
namespace:
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment