Merge branch 'master-jdk21' of https://gitee.com/zhijiantianya/ruoyi-vue-pro
# Conflicts: # yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/job/SchedulerManagerTest.java # yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/mq/RedisStreamTest.java # yudao-module-system/yudao-module-system-biz/src/test-integration/java/cn/iocoder/yudao/module/system/service/sms/SmsServiceIntegrationTest.java # yudao-module-system/yudao-module-system-biz/src/test-integration/resources/application-integration-test.yaml
This commit is contained in:
commit
5d935d0ffd
@ -1,13 +1,10 @@
|
|||||||
package cn.iocoder.yudao.framework.common.util.cache;
|
package cn.iocoder.yudao.framework.common.util.cache;
|
||||||
|
|
||||||
import com.alibaba.ttl.threadpool.TtlExecutors;
|
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -17,17 +14,36 @@ import java.util.concurrent.Executors;
|
|||||||
*/
|
*/
|
||||||
public class CacheUtils {
|
public class CacheUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建异步刷新的 LoadingCache 对象
|
||||||
|
*
|
||||||
|
* 注意:如果你的缓存和 ThreadLocal 有关系,要么自己处理 ThreadLocal 的传递,要么使用 {@link #buildCache(Duration, CacheLoader)} 方法
|
||||||
|
*
|
||||||
|
* 或者简单理解:
|
||||||
|
* 1、和“人”相关的,使用 {@link #buildCache(Duration, CacheLoader)} 方法
|
||||||
|
* 2、和“全局”、“系统”相关的,使用当前缓存方法
|
||||||
|
*
|
||||||
|
* @param duration 过期时间
|
||||||
|
* @param loader CacheLoader 对象
|
||||||
|
* @return LoadingCache 对象
|
||||||
|
*/
|
||||||
public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Duration duration, CacheLoader<K, V> loader) {
|
public static <K, V> LoadingCache<K, V> buildAsyncReloadingCache(Duration duration, CacheLoader<K, V> loader) {
|
||||||
// 1. 使用 TTL 包装 ExecutorService,实现 ThreadLocal 的透传
|
|
||||||
// https://github.com/YunaiV/ruoyi-vue-pro/issues/432
|
|
||||||
ExecutorService executorService = Executors.newCachedThreadPool(); // TODO 芋艿:可能要思考下,未来要不要做成可配置
|
|
||||||
Executor executor = TtlExecutors.getTtlExecutorService(executorService);
|
|
||||||
// 2. 创建 Guava LoadingCache
|
|
||||||
return CacheBuilder.newBuilder()
|
return CacheBuilder.newBuilder()
|
||||||
// 只阻塞当前数据加载线程,其他线程返回旧值
|
// 只阻塞当前数据加载线程,其他线程返回旧值
|
||||||
.refreshAfterWrite(duration)
|
.refreshAfterWrite(duration)
|
||||||
// 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程
|
// 通过 asyncReloading 实现全异步加载,包括 refreshAfterWrite 被阻塞的加载线程
|
||||||
.build(CacheLoader.asyncReloading(loader, executor));
|
.build(CacheLoader.asyncReloading(loader, Executors.newCachedThreadPool())); // TODO 芋艿:可能要思考下,未来要不要做成可配置
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建同步刷新的 LoadingCache 对象
|
||||||
|
*
|
||||||
|
* @param duration 过期时间
|
||||||
|
* @param loader CacheLoader 对象
|
||||||
|
* @return LoadingCache 对象
|
||||||
|
*/
|
||||||
|
public static <K, V> LoadingCache<K, V> buildCache(Duration duration, CacheLoader<K, V> loader) {
|
||||||
|
return CacheBuilder.newBuilder().refreshAfterWrite(duration).build(loader);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,6 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode CODEGEN_MASTER_TABLE_NOT_EXISTS = new ErrorCode(1_001_004_010, "主表(id={})定义不存在,请检查");
|
ErrorCode CODEGEN_MASTER_TABLE_NOT_EXISTS = new ErrorCode(1_001_004_010, "主表(id={})定义不存在,请检查");
|
||||||
ErrorCode CODEGEN_SUB_COLUMN_NOT_EXISTS = new ErrorCode(1_001_004_011, "子表的字段(id={})不存在,请检查");
|
ErrorCode CODEGEN_SUB_COLUMN_NOT_EXISTS = new ErrorCode(1_001_004_011, "子表的字段(id={})不存在,请检查");
|
||||||
ErrorCode CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_TABLE = new ErrorCode(1_001_004_012, "主表生成代码失败,原因:它没有子表");
|
ErrorCode CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_TABLE = new ErrorCode(1_001_004_012, "主表生成代码失败,原因:它没有子表");
|
||||||
ErrorCode CODEGEN_MASTER_GENERATION_FAIL_NO_SUB_COLUMN = new ErrorCode(1_001_004_013, "主表生成代码失败,原因:它的子表({})没有字段");
|
|
||||||
|
|
||||||
// ========== 文件配置 1-001-006-000 ==========
|
// ========== 文件配置 1-001-006-000 ==========
|
||||||
ErrorCode FILE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_006_000, "文件配置不存在");
|
ErrorCode FILE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_006_000, "文件配置不存在");
|
||||||
@ -57,9 +56,6 @@ public interface ErrorCodeConstants {
|
|||||||
ErrorCode DATA_SOURCE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_007_000, "数据源配置不存在");
|
ErrorCode DATA_SOURCE_CONFIG_NOT_EXISTS = new ErrorCode(1_001_007_000, "数据源配置不存在");
|
||||||
ErrorCode DATA_SOURCE_CONFIG_NOT_OK = new ErrorCode(1_001_007_001, "数据源配置不正确,无法进行连接");
|
ErrorCode DATA_SOURCE_CONFIG_NOT_OK = new ErrorCode(1_001_007_001, "数据源配置不正确,无法进行连接");
|
||||||
|
|
||||||
// ========== 数据源配置 1-001-107-000 ==========
|
|
||||||
ErrorCode DEMO_STUDENT_NOT_EXISTS = new ErrorCode(1_001_107_000, "学生不存在");
|
|
||||||
|
|
||||||
// ========== 学生 1-001-201-000 ==========
|
// ========== 学生 1-001-201-000 ==========
|
||||||
ErrorCode DEMO01_CONTACT_NOT_EXISTS = new ErrorCode(1_001_201_000, "示例联系人不存在");
|
ErrorCode DEMO01_CONTACT_NOT_EXISTS = new ErrorCode(1_001_201_000, "示例联系人不存在");
|
||||||
ErrorCode DEMO02_CATEGORY_NOT_EXISTS = new ErrorCode(1_001_201_001, "示例分类不存在");
|
ErrorCode DEMO02_CATEGORY_NOT_EXISTS = new ErrorCode(1_001_201_001, "示例分类不存在");
|
||||||
|
@ -1,53 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.job;
|
|
||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
|
||||||
import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager;
|
|
||||||
import cn.iocoder.yudao.module.system.job.auth.UserSessionTimeoutJob;
|
|
||||||
import cn.iocoder.yudao.module.system.test.BaseDbUnitTest;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.quartz.SchedulerException;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
public class SchedulerManagerTest extends BaseDbUnitTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SchedulerManager schedulerManager;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testAddJob() throws SchedulerException {
|
|
||||||
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
|
|
||||||
schedulerManager.addJob(1L, jobHandlerName, "test", "0/10 * * * * ? *", 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateJob() throws SchedulerException {
|
|
||||||
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
|
|
||||||
schedulerManager.updateJob(jobHandlerName, "hahaha", "0/20 * * * * ? *", 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDeleteJob() throws SchedulerException {
|
|
||||||
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
|
|
||||||
schedulerManager.deleteJob(jobHandlerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testPauseJob() throws SchedulerException {
|
|
||||||
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
|
|
||||||
schedulerManager.pauseJob(jobHandlerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testResumeJob() throws SchedulerException {
|
|
||||||
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
|
|
||||||
schedulerManager.resumeJob(jobHandlerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testTriggerJob() throws SchedulerException {
|
|
||||||
String jobHandlerName = StrUtil.lowerFirst(UserSessionTimeoutJob.class.getSimpleName());
|
|
||||||
schedulerManager.triggerJob(1L, jobHandlerName, "niubi!!!");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.mq;
|
|
||||||
|
|
||||||
import cn.hutool.core.thread.ThreadUtil;
|
|
||||||
import cn.iocoder.yudao.framework.mq.core.RedisMQTemplate;
|
|
||||||
import cn.iocoder.yudao.module.system.mq.consumer.mail.MailSendConsumer;
|
|
||||||
import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer;
|
|
||||||
import cn.iocoder.yudao.module.system.mq.message.mail.MailSendMessage;
|
|
||||||
import cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage;
|
|
||||||
import cn.iocoder.yudao.module.system.test.BaseRedisIntegrationTest;
|
|
||||||
import org.junit.jupiter.api.Disabled;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
public class RedisStreamTest {
|
|
||||||
|
|
||||||
@Import({SmsSendConsumer.class, MailSendConsumer.class})
|
|
||||||
@Disabled
|
|
||||||
public static class ConsumerTest extends BaseRedisIntegrationTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testConsumer() {
|
|
||||||
ThreadUtil.sleep(1, TimeUnit.DAYS);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Disabled
|
|
||||||
public static class ProducerTest extends BaseRedisIntegrationTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RedisMQTemplate redisMQTemplate;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private RedisTemplate<String, Object> redisTemplate;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testProducer01() {
|
|
||||||
for (int i = 0; i < 100; i++) {
|
|
||||||
// 创建消息
|
|
||||||
SmsSendMessage message = new SmsSendMessage();
|
|
||||||
message.setMobile("15601691300").setApiTemplateId("test:" + i);
|
|
||||||
// 发送消息
|
|
||||||
redisMQTemplate.send(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testProducer02() {
|
|
||||||
// 创建消息
|
|
||||||
MailSendMessage message = new MailSendMessage();
|
|
||||||
message.setAddress("fangfang@mihayou.com").setTemplateCode("test");
|
|
||||||
// 发送消息
|
|
||||||
redisMQTemplate.send(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
/**
|
|
||||||
* 占位
|
|
||||||
*/
|
|
||||||
package cn.iocoder.yudao.module.system.service;
|
|
@ -1,55 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.service.sms;
|
|
||||||
|
|
||||||
import cn.hutool.core.map.MapUtil;
|
|
||||||
import cn.hutool.core.thread.ThreadUtil;
|
|
||||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
|
||||||
import cn.iocoder.yudao.framework.sms.config.YudaoSmsAutoConfiguration;
|
|
||||||
import cn.iocoder.yudao.module.system.test.BaseDbAndRedisIntegrationTest;
|
|
||||||
import cn.iocoder.yudao.module.system.mq.consumer.sms.SmsSendConsumer;
|
|
||||||
import cn.iocoder.yudao.module.system.mq.producer.sms.SmsProducer;
|
|
||||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
// TODO @芋艿:需要迁移
|
|
||||||
@Import({YudaoSmsAutoConfiguration.class,
|
|
||||||
SmsChannelServiceImpl.class, SmsSendServiceImpl.class, SmsTemplateServiceImpl.class, SmsLogServiceImpl.class,
|
|
||||||
SmsProducer.class, SmsSendConsumer.class})
|
|
||||||
public class SmsServiceIntegrationTest extends BaseDbAndRedisIntegrationTest {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
private SmsSendServiceImpl smsService;
|
|
||||||
@Resource
|
|
||||||
private SmsChannelServiceImpl smsChannelService;
|
|
||||||
|
|
||||||
@MockBean
|
|
||||||
private AdminUserService userService;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSendSingleSms_aliyunSuccess() {
|
|
||||||
// 参数准备
|
|
||||||
String mobile = "15601691399";
|
|
||||||
Long userId = 1L;
|
|
||||||
Integer userType = UserTypeEnum.ADMIN.getValue();
|
|
||||||
String templateCode = "test_02";
|
|
||||||
Map<String, Object> templateParams = MapUtil.<String, Object>builder()
|
|
||||||
.put("code", "1234").build();
|
|
||||||
// 调用
|
|
||||||
smsService.sendSingleSms(mobile, userId, userType, templateCode, templateParams);
|
|
||||||
|
|
||||||
// 等待 MQ 消费
|
|
||||||
ThreadUtil.sleep(1, TimeUnit.HOURS);
|
|
||||||
}
|
|
||||||
|
|
||||||
// @Test
|
|
||||||
// public void testDoSendSms() {
|
|
||||||
// // 等待 MQ 消费
|
|
||||||
// ThreadUtil.sleep(1, TimeUnit.HOURS);
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.test;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.datasource.config.YudaoDataSourceAutoConfiguration;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.config.YudaoMybatisAutoConfiguration;
|
|
||||||
import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
|
|
||||||
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
|
|
||||||
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
|
|
||||||
import org.redisson.spring.starter.RedissonAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
|
||||||
|
|
||||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseDbAndRedisIntegrationTest.Application.class)
|
|
||||||
@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
|
|
||||||
public class BaseDbAndRedisIntegrationTest {
|
|
||||||
|
|
||||||
@Import({
|
|
||||||
// DB 配置类
|
|
||||||
DynamicDataSourceAutoConfiguration.class, // Dynamic Datasource 配置类
|
|
||||||
YudaoDataSourceAutoConfiguration.class, // 自己的 DB 配置类
|
|
||||||
DataSourceAutoConfiguration.class, // Spring DB 自动配置类
|
|
||||||
DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
|
|
||||||
// MyBatis 配置类
|
|
||||||
YudaoMybatisAutoConfiguration.class, // 自己的 MyBatis 配置类
|
|
||||||
MybatisPlusAutoConfiguration.class, // MyBatis 的自动配置类
|
|
||||||
|
|
||||||
// Redis 配置类
|
|
||||||
RedisAutoConfiguration.class, // Spring Redis 自动配置类
|
|
||||||
YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
|
|
||||||
RedissonAutoConfiguration.class, // Redisson 自动高配置类
|
|
||||||
})
|
|
||||||
public static class Application {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
package cn.iocoder.yudao.module.system.test;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.redis.config.YudaoRedisAutoConfiguration;
|
|
||||||
import org.redisson.spring.starter.RedissonAutoConfiguration;
|
|
||||||
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
|
||||||
|
|
||||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = BaseRedisIntegrationTest.Application.class)
|
|
||||||
@ActiveProfiles("integration-test") // 设置使用 application-integration-test 配置文件
|
|
||||||
public class BaseRedisIntegrationTest {
|
|
||||||
|
|
||||||
@Import({
|
|
||||||
// Redis 配置类
|
|
||||||
RedisAutoConfiguration.class, // Spring Redis 自动配置类
|
|
||||||
YudaoRedisAutoConfiguration.class, // 自己的 Redis 配置类
|
|
||||||
RedissonAutoConfiguration.class, // Redisson 自动高配置类
|
|
||||||
})
|
|
||||||
public static class Application {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
spring:
|
|
||||||
main:
|
|
||||||
lazy-initialization: true # 开启懒加载,加快速度
|
|
||||||
banner-mode: off # 单元测试,禁用 Banner
|
|
||||||
|
|
||||||
--- #################### 数据库相关配置 ####################
|
|
||||||
|
|
||||||
spring:
|
|
||||||
# 数据源配置项
|
|
||||||
autoconfigure:
|
|
||||||
exclude:
|
|
||||||
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
|
|
||||||
datasource:
|
|
||||||
druid: # Druid 【监控】相关的全局配置
|
|
||||||
web-stat-filter:
|
|
||||||
enabled: true
|
|
||||||
stat-view-servlet:
|
|
||||||
enabled: true
|
|
||||||
allow: # 设置白名单,不填则允许所有访问
|
|
||||||
url-pattern: /druid/*
|
|
||||||
login-username: # 控制台管理用户名和密码
|
|
||||||
login-password:
|
|
||||||
filter:
|
|
||||||
stat:
|
|
||||||
enabled: true
|
|
||||||
log-slow-sql: true # 慢 SQL 记录
|
|
||||||
slow-sql-millis: 100
|
|
||||||
merge-sql: true
|
|
||||||
wall:
|
|
||||||
config:
|
|
||||||
multi-statement-allow: true
|
|
||||||
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
|
|
||||||
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
|
|
||||||
username: root
|
|
||||||
password: 123456
|
|
||||||
|
|
||||||
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
|
|
||||||
redis:
|
|
||||||
host: 127.0.0.1 # 地址
|
|
||||||
port: 6379 # 端口
|
|
||||||
database: 0 # 数据库索引
|
|
||||||
|
|
||||||
mybatis:
|
|
||||||
lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试
|
|
||||||
|
|
||||||
--- #################### 定时任务相关配置 ####################
|
|
||||||
|
|
||||||
--- #################### 配置中心相关配置 ####################
|
|
||||||
|
|
||||||
--- #################### 服务保障相关配置 ####################
|
|
||||||
|
|
||||||
# Lock4j 配置项(单元测试,禁用 Lock4j)
|
|
||||||
|
|
||||||
--- #################### 监控相关配置 ####################
|
|
||||||
|
|
||||||
--- #################### 芋道相关配置 ####################
|
|
||||||
|
|
||||||
# 芋道配置项,设置当前项目所有自定义的配置
|
|
||||||
yudao:
|
|
||||||
security:
|
|
||||||
token-header: Authorization
|
|
||||||
token-secret: abcdefghijklmnopqrstuvwxyz
|
|
||||||
token-timeout: 1d
|
|
||||||
session-timeout: 30m
|
|
||||||
mock-enable: true
|
|
||||||
mock-secret: test
|
|
||||||
swagger:
|
|
||||||
enable: false # 单元测试,禁用 Swagger
|
|
||||||
file:
|
|
||||||
base-path: http://127.0.0.1:${server.port}/${yudao.web.api-prefix}/file/get/
|
|
||||||
xss:
|
|
||||||
enable: false
|
|
||||||
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
|
|
||||||
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
|
|
||||||
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
|
|
Loading…
Reference in New Issue
Block a user