1. 处理多个环境的配置
parent
ef7089c1b9
commit
4f70810c35
11
README.md
11
README.md
|
@ -35,12 +35,12 @@
|
||||||
| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 |
|
| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 |
|
||||||
| | 岗位管理 | 配置系统用户所属担任职务 |
|
| | 岗位管理 | 配置系统用户所属担任职务 |
|
||||||
| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 |
|
| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 |
|
||||||
| | 通知公告 | 系统通知公告信息发布维护 |
|
| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、云片等主流短信平台 |
|
||||||
| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
|
| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
|
||||||
| | 登录日志 | 系统登录日志记录查询包含登录异常 |
|
| | 登录日志 | 系统登录日志记录查询包含登录异常 |
|
||||||
|
| | 通知公告 | 系统通知公告信息发布维护 |
|
||||||
|
|
||||||
计划新增功能:
|
计划新增功能:
|
||||||
* 短信
|
|
||||||
* 邮件
|
* 邮件
|
||||||
* 钉钉、飞书等通知
|
* 钉钉、飞书等通知
|
||||||
|
|
||||||
|
@ -87,14 +87,15 @@
|
||||||
|
|
||||||
## 技术栈
|
## 技术栈
|
||||||
|
|
||||||
**后端**
|
### 后端
|
||||||
|
|
||||||
| 框架 | 说明 | 版本 | 学习指南 |
|
| 框架 | 说明 | 版本 | 学习指南 |
|
||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.4.2 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
|
| [Spring Boot](https://spring.io/projects/spring-boot) | 应用开发框架 | 2.4.2 | [文档](https://github.com/YunaiV/SpringBoot-Labs) |
|
||||||
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 | |
|
| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 | |
|
||||||
| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.4 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.4 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||||
| [MyBatis-Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
|
| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.4.1 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) |
|
||||||
|
| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 3.3.2 | [文档](hhttp://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
|
||||||
| [Redis](https://redis.io/) | key-value 数据库 | 5.0 | |
|
| [Redis](https://redis.io/) | key-value 数据库 | 5.0 | |
|
||||||
| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.1.46 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) |
|
| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.1.46 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) |
|
||||||
| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.4.2 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) |
|
| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 5.4.2 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) |
|
||||||
|
@ -111,7 +112,7 @@
|
||||||
| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.7.0 | - |
|
| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.7.0 | - |
|
||||||
| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 3.6.28 | - |
|
| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 3.6.28 | - |
|
||||||
|
|
||||||
**前端**
|
### 前端
|
||||||
|
|
||||||
| 框架 | 说明 | 版本 |
|
| 框架 | 说明 | 版本 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.ruoyi.common.annotation;
|
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
|
||||||
import java.lang.annotation.ElementType;
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.lang.annotation.Target;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 数据权限过滤注解
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
@Target(ElementType.METHOD)
|
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
|
||||||
@Documented
|
|
||||||
public @interface DataScope {
|
|
||||||
/**
|
|
||||||
* 部门表的别名
|
|
||||||
*/
|
|
||||||
public String deptAlias() default "";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 用户表的别名
|
|
||||||
*/
|
|
||||||
public String userAlias() default "";
|
|
||||||
}
|
|
|
@ -1,145 +0,0 @@
|
||||||
package com.ruoyi.framework.aspectj;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import org.aspectj.lang.JoinPoint;
|
|
||||||
import org.aspectj.lang.Signature;
|
|
||||||
import org.aspectj.lang.annotation.Aspect;
|
|
||||||
import org.aspectj.lang.annotation.Before;
|
|
||||||
import org.aspectj.lang.annotation.Pointcut;
|
|
||||||
import org.aspectj.lang.reflect.MethodSignature;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import com.ruoyi.common.annotation.DataScope;
|
|
||||||
import com.ruoyi.common.core.domain.BaseEntity;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysRole;
|
|
||||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
||||||
import com.ruoyi.common.core.domain.model.LoginUser;
|
|
||||||
import com.ruoyi.common.utils.ServletUtils;
|
|
||||||
import com.ruoyi.common.utils.StringUtils;
|
|
||||||
import com.ruoyi.common.utils.spring.SpringUtils;
|
|
||||||
import com.ruoyi.framework.web.service.TokenService;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 数据过滤处理
|
|
||||||
*
|
|
||||||
* @author ruoyi
|
|
||||||
*/
|
|
||||||
@Aspect
|
|
||||||
@Component
|
|
||||||
public class DataScopeAspect {
|
|
||||||
/**
|
|
||||||
* 全部数据权限
|
|
||||||
*/
|
|
||||||
public static final String DATA_SCOPE_ALL = "1";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 自定数据权限
|
|
||||||
*/
|
|
||||||
public static final String DATA_SCOPE_CUSTOM = "2";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 部门数据权限
|
|
||||||
*/
|
|
||||||
public static final String DATA_SCOPE_DEPT = "3";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 部门及以下数据权限
|
|
||||||
*/
|
|
||||||
public static final String DATA_SCOPE_DEPT_AND_CHILD = "4";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 仅本人数据权限
|
|
||||||
*/
|
|
||||||
public static final String DATA_SCOPE_SELF = "5";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 数据权限过滤关键字
|
|
||||||
*/
|
|
||||||
public static final String DATA_SCOPE = "dataScope";
|
|
||||||
|
|
||||||
// 配置织入点
|
|
||||||
@Pointcut("@annotation(com.ruoyi.common.annotation.DataScope)")
|
|
||||||
public void dataScopePointCut() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Before("dataScopePointCut()")
|
|
||||||
public void doBefore(JoinPoint point) throws Throwable {
|
|
||||||
handleDataScope(point);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void handleDataScope(final JoinPoint joinPoint) {
|
|
||||||
// 获得注解
|
|
||||||
DataScope controllerDataScope = getAnnotationLog(joinPoint);
|
|
||||||
if (controllerDataScope == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 获取当前的用户
|
|
||||||
LoginUser loginUser = SpringUtils.getBean(TokenService.class).getLoginUser(ServletUtils.getRequest());
|
|
||||||
if (StringUtils.isNotNull(loginUser)) {
|
|
||||||
SysUser currentUser = loginUser.getUser();
|
|
||||||
// 如果是超级管理员,则不过滤数据
|
|
||||||
if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) {
|
|
||||||
dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
|
|
||||||
controllerDataScope.userAlias());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 数据范围过滤
|
|
||||||
*
|
|
||||||
* @param joinPoint 切点
|
|
||||||
* @param user 用户
|
|
||||||
* @param userAlias 别名
|
|
||||||
*/
|
|
||||||
public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias) {
|
|
||||||
StringBuilder sqlString = new StringBuilder();
|
|
||||||
|
|
||||||
for (SysRole role : user.getRoles()) {
|
|
||||||
String dataScope = role.getDataScope();
|
|
||||||
if (DATA_SCOPE_ALL.equals(dataScope)) {
|
|
||||||
sqlString = new StringBuilder();
|
|
||||||
break;
|
|
||||||
} else if (DATA_SCOPE_CUSTOM.equals(dataScope)) {
|
|
||||||
sqlString.append(StringUtils.format(
|
|
||||||
" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
|
|
||||||
role.getRoleId()));
|
|
||||||
} else if (DATA_SCOPE_DEPT.equals(dataScope)) {
|
|
||||||
sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId()));
|
|
||||||
} else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) {
|
|
||||||
sqlString.append(StringUtils.format(
|
|
||||||
" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
|
|
||||||
deptAlias, user.getDeptId(), user.getDeptId()));
|
|
||||||
} else if (DATA_SCOPE_SELF.equals(dataScope)) {
|
|
||||||
if (StringUtils.isNotBlank(userAlias)) {
|
|
||||||
sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
|
|
||||||
} else {
|
|
||||||
// 数据权限为仅本人且没有userAlias别名不查询任何数据
|
|
||||||
sqlString.append(" OR 1=0 ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(sqlString.toString())) {
|
|
||||||
Object params = joinPoint.getArgs()[0];
|
|
||||||
if (StringUtils.isNotNull(params) && params instanceof BaseEntity) {
|
|
||||||
BaseEntity baseEntity = (BaseEntity) params;
|
|
||||||
baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 是否存在注解,如果存在就获取
|
|
||||||
*/
|
|
||||||
private DataScope getAnnotationLog(JoinPoint joinPoint) {
|
|
||||||
Signature signature = joinPoint.getSignature();
|
|
||||||
MethodSignature methodSignature = (MethodSignature) signature;
|
|
||||||
Method method = methodSignature.getMethod();
|
|
||||||
|
|
||||||
if (method != null) {
|
|
||||||
return method.getAnnotation(DataScope.class);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package cn.iocoder.dashboard.framework.datasource.core.enums;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对应于多数据源中不同数据源配置
|
||||||
|
*
|
||||||
|
* 通过在方法上,使用 {@link com.baomidou.dynamic.datasource.annotation.DS} 注解,设置使用的数据源。
|
||||||
|
* 注意,默认是 {@link #MASTER} 数据源
|
||||||
|
*
|
||||||
|
* 对应官方文档为 http://dynamic-datasource.com/guide/customize/Annotation.html
|
||||||
|
*/
|
||||||
|
public interface DataSourceEnum {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主库,推荐使用 {@link com.baomidou.dynamic.datasource.annotation.Master} 注解
|
||||||
|
*/
|
||||||
|
String MASTER = "master";
|
||||||
|
/**
|
||||||
|
* 从库,推荐使用 {@link com.baomidou.dynamic.datasource.annotation.Slave} 注解
|
||||||
|
*/
|
||||||
|
String SLAVE = "slave";
|
||||||
|
|
||||||
|
}
|
|
@ -1,14 +0,0 @@
|
||||||
package cn.iocoder.dashboard.framework.datasource.core.enums;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 对应于多数据源中不同数据源配置
|
|
||||||
*
|
|
||||||
* 在方法上使用注解{@code @DS(DatasourceMark.slave)}可以指定slave数据源,默认是master数据源
|
|
||||||
*/
|
|
||||||
public interface DatasourceMark {
|
|
||||||
|
|
||||||
String MASTER = "master";
|
|
||||||
|
|
||||||
String SLAVE = "slave";
|
|
||||||
|
|
||||||
}
|
|
|
@ -18,11 +18,7 @@ public interface ToolSchemaTableMapper extends BaseMapperX<ToolSchemaTableDO> {
|
||||||
.likeIfPresent("table_comment", tableComment));
|
.likeIfPresent("table_comment", tableComment));
|
||||||
}
|
}
|
||||||
|
|
||||||
default List<ToolSchemaTableDO> selectListByTableSchema(String tableSchema) {
|
default ToolSchemaTableDO selectByTableSchemaAndTableName(String tableSchema, String tableName) {
|
||||||
return selectList(new QueryWrapper<ToolSchemaTableDO>().eq("table_schema", tableSchema));
|
|
||||||
}
|
|
||||||
|
|
||||||
default ToolSchemaTableDO selectByTableName1(String tableSchema, String tableName) {
|
|
||||||
return selectOne(new QueryWrapper<ToolSchemaTableDO>().eq("table_schema",tableSchema)
|
return selectOne(new QueryWrapper<ToolSchemaTableDO>().eq("table_schema",tableSchema)
|
||||||
.eq("table_name", tableName));
|
.eq("table_name", tableName));
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,7 +104,7 @@ public class ToolCodegenServiceImpl implements ToolCodegenService {
|
||||||
// 获取当前schema
|
// 获取当前schema
|
||||||
String tableSchema = codegenProperties.getDbSchemas().iterator().next();
|
String tableSchema = codegenProperties.getDbSchemas().iterator().next();
|
||||||
// 从数据库中,获得数据库表结构
|
// 从数据库中,获得数据库表结构
|
||||||
ToolSchemaTableDO schemaTable = schemaTableMapper.selectByTableName1(tableSchema, tableName);
|
ToolSchemaTableDO schemaTable = schemaTableMapper.selectByTableSchemaAndTableName(tableSchema, tableName);
|
||||||
List<ToolSchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName);
|
List<ToolSchemaColumnDO> schemaColumns = schemaColumnMapper.selectListByTableName(tableSchema, tableName);
|
||||||
// 导入
|
// 导入
|
||||||
return this.createCodegen0(ToolCodegenImportTypeEnum.DB, schemaTable, schemaColumns);
|
return this.createCodegen0(ToolCodegenImportTypeEnum.DB, schemaTable, schemaColumns);
|
||||||
|
|
|
@ -4,39 +4,42 @@ server:
|
||||||
--- #################### 数据库相关配置 ####################
|
--- #################### 数据库相关配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
# 数据源配置项 TODO 监控配置
|
# 数据源配置项
|
||||||
# 排除默认的自动配置,使用dynamic-datasource-spring-boot-starter配置多数据源,整合druid
|
|
||||||
autoconfigure:
|
autoconfigure:
|
||||||
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
|
exclude:
|
||||||
|
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
|
||||||
datasource:
|
datasource:
|
||||||
druid:
|
druid: # Druid 【监控】相关的全局配置
|
||||||
web-stat-filter:
|
web-stat-filter:
|
||||||
enabled: true
|
enabled: true
|
||||||
stat-view-servlet:
|
stat-view-servlet:
|
||||||
enabled: true
|
enabled: true
|
||||||
# 设置白名单,不填则允许所有访问
|
allow: # 设置白名单,不填则允许所有访问
|
||||||
allow:
|
|
||||||
url-pattern: /druid/*
|
url-pattern: /druid/*
|
||||||
# 控制台管理用户名和密码
|
login-username: # 控制台管理用户名和密码
|
||||||
login-username:
|
|
||||||
login-password:
|
login-password:
|
||||||
filter:
|
filter:
|
||||||
stat:
|
stat:
|
||||||
enabled: true
|
enabled: true
|
||||||
# 慢 SQL 记录
|
log-slow-sql: true # 慢 SQL 记录
|
||||||
log-slow-sql: true
|
|
||||||
slow-sql-millis: 100
|
slow-sql-millis: 100
|
||||||
merge-sql: true
|
merge-sql: true
|
||||||
wall:
|
wall:
|
||||||
config:
|
config:
|
||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
dynamic:
|
dynamic: # 多数据源配置
|
||||||
# druid全局配置 https://dynamic-datasource.com/en/guide/integration/Druid.html#configurate-parameters
|
druid: # Druid 【连接池】相关的全局配置
|
||||||
# druid: #The following are the supported global parameters
|
initial-size: 5 # 初始连接数
|
||||||
# initial-size:
|
min-idle: 10 # 最小连接池数量
|
||||||
# max-active:
|
max-active: 20 # 最大连接池数量
|
||||||
# min-idle:
|
max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
|
||||||
# max-wait:
|
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
|
||||||
|
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
|
||||||
|
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
|
||||||
|
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
|
||||||
|
test-while-idle: true
|
||||||
|
test-on-borrow: false
|
||||||
|
test-on-return: false
|
||||||
primary: master
|
primary: master
|
||||||
datasource:
|
datasource:
|
||||||
master:
|
master:
|
||||||
|
@ -45,19 +48,12 @@ spring:
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
username: root
|
username: root
|
||||||
password: 3WLiVUBEwTbvAfsh
|
password: 3WLiVUBEwTbvAfsh
|
||||||
# druid 局部配置
|
slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
|
||||||
# druid: # The following are independent parameters that can be reset for each db
|
name: ruoyi-vue-pro
|
||||||
# validation-query: select 1 FROM DUAL #such as oracle need this
|
url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
|
||||||
# slave:
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
# name: ruoyi-vue-pro-slave
|
username: root
|
||||||
# url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
|
password: 3WLiVUBEwTbvAfsh
|
||||||
# driver-class-name: com.mysql.jdbc.Driver
|
|
||||||
# username: root
|
|
||||||
# password: 123456
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
|
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
|
||||||
redis:
|
redis:
|
||||||
|
@ -103,9 +99,9 @@ apollo:
|
||||||
eagerLoad:
|
eagerLoad:
|
||||||
enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
|
enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
|
||||||
jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
|
jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
|
||||||
url: ${spring.datasource.url}
|
url: ${spring.datasource.dynamic.datasource.master.url}
|
||||||
username: ${spring.datasource.username}
|
username: ${spring.datasource.dynamic.datasource.master.username}
|
||||||
password: ${spring.datasource.password}
|
password: ${spring.datasource.dynamic.datasource.master.password}
|
||||||
|
|
||||||
--- #################### 服务保障相关配置 ####################
|
--- #################### 服务保障相关配置 ####################
|
||||||
|
|
||||||
|
@ -181,7 +177,7 @@ yudao:
|
||||||
base-path: http://127.0.0.1:${server.port}${yudao.web.api-prefix}/system/file/get/
|
base-path: http://127.0.0.1:${server.port}${yudao.web.api-prefix}/system/file/get/
|
||||||
codegen:
|
codegen:
|
||||||
base-package: ${yudao.info.base-package}
|
base-package: ${yudao.info.base-package}
|
||||||
db-schemas: ${spring.datasource.name}
|
db-schemas: ${spring.datasource.dynamic.datasource.master.name}
|
||||||
xss:
|
xss:
|
||||||
enable: false
|
enable: false
|
||||||
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
|
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
|
||||||
|
|
|
@ -4,7 +4,7 @@ server:
|
||||||
--- #################### 数据库相关配置 ####################
|
--- #################### 数据库相关配置 ####################
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
# 数据源配置项 TODO 监控配置
|
# 数据源配置项
|
||||||
autoconfigure:
|
autoconfigure:
|
||||||
exclude:
|
exclude:
|
||||||
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
|
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
|
||||||
|
@ -48,8 +48,8 @@ spring:
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
username: root
|
username: root
|
||||||
password: 123456
|
password: 123456
|
||||||
slave:
|
slave: # 模拟从库,可根据自己需要修改
|
||||||
name: ruoyi-vue-slave
|
name: ruoyi-vue-pro
|
||||||
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
|
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
username: root
|
username: root
|
||||||
|
@ -177,18 +177,10 @@ yudao:
|
||||||
base-path: http://127.0.0.1:${server.port}${yudao.web.api-prefix}/system/file/get/
|
base-path: http://127.0.0.1:${server.port}${yudao.web.api-prefix}/system/file/get/
|
||||||
codegen:
|
codegen:
|
||||||
base-package: ${yudao.info.base-package}
|
base-package: ${yudao.info.base-package}
|
||||||
db-schemas: ${spring.datasource.name}
|
db-schemas: ${spring.datasource.dynamic.datasource.master.name}
|
||||||
xss:
|
xss:
|
||||||
enable: false
|
enable: false
|
||||||
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
|
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
|
||||||
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
|
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
|
||||||
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
|
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
|
||||||
demo: false # 关闭演示模式
|
demo: false # 关闭演示模式
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ spring:
|
||||||
max-file-size: 16MB # 单个文件大小
|
max-file-size: 16MB # 单个文件大小
|
||||||
max-request-size: 32MB # 设置总上传的文件大小
|
max-request-size: 32MB # 设置总上传的文件大小
|
||||||
|
|
||||||
# Jackson 配置项
|
|
||||||
jackson:
|
jackson:
|
||||||
serialization:
|
serialization:
|
||||||
write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳
|
write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳
|
||||||
|
@ -32,3 +31,6 @@ mybatis-plus:
|
||||||
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
|
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
|
||||||
mapper-locations: classpath*:mapper/*.xml
|
mapper-locations: classpath*:mapper/*.xml
|
||||||
type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject
|
type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject
|
||||||
|
|
||||||
|
--- #################### 芋道相关配置 ####################
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,8 @@ import cn.iocoder.dashboard.framework.datasource.config.DataSourceConfiguration;
|
||||||
import cn.iocoder.dashboard.framework.mybatis.config.MybatisConfiguration;
|
import cn.iocoder.dashboard.framework.mybatis.config.MybatisConfiguration;
|
||||||
import cn.iocoder.dashboard.framework.redis.config.RedisConfig;
|
import cn.iocoder.dashboard.framework.redis.config.RedisConfig;
|
||||||
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
|
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
|
||||||
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
|
||||||
|
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidDynamicDataSourceConfiguration;
|
||||||
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
|
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
|
||||||
import org.redisson.spring.starter.RedissonAutoConfiguration;
|
import org.redisson.spring.starter.RedissonAutoConfiguration;
|
||||||
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
||||||
|
@ -26,6 +28,9 @@ public class BaseDbAndRedisIntegrationTest {
|
||||||
// MyBatis 配置类
|
// MyBatis 配置类
|
||||||
MybatisConfiguration.class, // 自己的 MyBatis 配置类
|
MybatisConfiguration.class, // 自己的 MyBatis 配置类
|
||||||
MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
|
MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
|
||||||
|
// Dynamic Datasource 配置后类
|
||||||
|
DynamicDataSourceAutoConfiguration.class, //
|
||||||
|
DruidDynamicDataSourceConfiguration.class, //
|
||||||
// Redis 配置类
|
// Redis 配置类
|
||||||
RedisAutoConfiguration.class, // Spring Redis 自动配置类
|
RedisAutoConfiguration.class, // Spring Redis 自动配置类
|
||||||
RedisConfig.class, // 自己的 Redis 配置类
|
RedisConfig.class, // 自己的 Redis 配置类
|
||||||
|
|
|
@ -1,24 +1,12 @@
|
||||||
package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
|
package cn.iocoder.dashboard.modules.tool.dal.mysql.codegen;
|
||||||
|
|
||||||
import cn.iocoder.dashboard.BaseDbUnitTest;
|
import cn.iocoder.dashboard.BaseDbUnitTest;
|
||||||
import cn.iocoder.dashboard.modules.tool.dal.dataobject.codegen.ToolSchemaTableDO;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
class ToolInformationSchemaTableMapperTest extends BaseDbUnitTest {
|
class ToolInformationSchemaTableMapperTest extends BaseDbUnitTest {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ToolSchemaTableMapper toolInformationSchemaTableMapper;
|
private ToolSchemaTableMapper toolInformationSchemaTableMapper;
|
||||||
|
|
||||||
@Test
|
|
||||||
public void tstSelectListByTableSchema() {
|
|
||||||
List<ToolSchemaTableDO> tables = toolInformationSchemaTableMapper
|
|
||||||
.selectListByTableSchema("ruoyi-vue-pro");
|
|
||||||
assertTrue(tables.size() > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,34 @@ spring:
|
||||||
|
|
||||||
spring:
|
spring:
|
||||||
# 数据源配置项
|
# 数据源配置项
|
||||||
|
autoconfigure:
|
||||||
|
exclude:
|
||||||
|
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
|
||||||
datasource:
|
datasource:
|
||||||
|
dynamic: # 多数据源配置
|
||||||
|
druid: # Druid 【连接池】相关的全局配置
|
||||||
|
initial-size: 5 # 初始连接数
|
||||||
|
min-idle: 10 # 最小连接池数量
|
||||||
|
max-active: 20 # 最大连接池数量
|
||||||
|
max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
|
||||||
|
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
|
||||||
|
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
|
||||||
|
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
|
||||||
|
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
|
||||||
|
test-while-idle: true
|
||||||
|
test-on-borrow: false
|
||||||
|
test-on-return: false
|
||||||
|
primary: master
|
||||||
|
datasource:
|
||||||
|
master:
|
||||||
name: ruoyi-vue-pro
|
name: ruoyi-vue-pro
|
||||||
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
|
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
|
||||||
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
|
username: root
|
||||||
|
password: 123456
|
||||||
|
slave: # 模拟从库,可根据自己需要修改
|
||||||
|
name: ruoyi-vue-pro
|
||||||
|
url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
username: root
|
username: root
|
||||||
password: 123456
|
password: 123456
|
||||||
|
@ -70,7 +95,7 @@ yudao:
|
||||||
base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
|
base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
|
||||||
codegen:
|
codegen:
|
||||||
base-package: ${yudao.info.base-package}.modules
|
base-package: ${yudao.info.base-package}.modules
|
||||||
db-schemas: ${spring.datasource.name}
|
db-schemas: ${spring.datasource.dynamic.datasource.master.name}
|
||||||
xss:
|
xss:
|
||||||
enable: false
|
enable: false
|
||||||
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
|
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
|
||||||
|
|
Loading…
Reference in New Issue