多租户,接入 Spring Async 机制

This commit is contained in:
YunaiV 2021-12-05 17:59:58 +08:00
parent cc78025f80
commit ade55d89a4
11 changed files with 48 additions and 30 deletions

View File

@ -1,9 +0,0 @@
package cn.iocoder.yudao.adminserver.framework.async.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration
@EnableAsync
public class AsyncConfiguration {
}

View File

@ -1,4 +0,0 @@
/**
* 异步执行基于 Spring @Async 实现
*/
package cn.iocoder.yudao.adminserver.framework.async;

View File

@ -12,7 +12,10 @@
<packaging>jar</packaging>
<name>${artifactId}</name>
<description>定时任务,基于 Quartz 拓展</description>
<description>任务拓展
1. 定时任务,基于 Quartz 拓展
2. 异步任务,基于 Spring Async 拓展
</description>
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
<dependencies>

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.framework.quartz.config;
import com.alibaba.ttl.TtlRunnable;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/**
* 异步任务 Configuration
*/
@Configuration
@EnableAsync
public class YudaoAsyncAutoConfiguration {
@Bean
public BeanPostProcessor threadPoolTaskExecutorBeanPostProcessor() {
return new BeanPostProcessor() {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (!(bean instanceof ThreadPoolTaskExecutor)) {
return bean;
}
// 修改提交的任务接入 TransmittableThreadLocal
ThreadPoolTaskExecutor executor = (ThreadPoolTaskExecutor) bean;
executor.setTaskDecorator(TtlRunnable::get);
return executor;
}
};
}
}

View File

@ -6,6 +6,9 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 定时任务 Configuration
*/
@Configuration
@EnableScheduling // 开启 Spring 自带的定时任务
public class YudaoQuartzAutoConfiguration {

View File

@ -1,5 +1,7 @@
/**
* 定时任务采用 Quartz 实现进程内的任务执行
* 1. 定时任务采用 Quartz 实现进程内的任务执行
* 考虑到高可用使用 Quartz 自带的 MySQL 集群方案
*
* 2. 异步任务采用 Spring Async 异步执行
*/
package cn.iocoder.yudao.framework.quartz;

View File

@ -1,2 +1,3 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.iocoder.yudao.framework.quartz.config.YudaoQuartzAutoConfiguration
cn.iocoder.yudao.framework.quartz.config.YudaoQuartzAutoConfiguration,\
cn.iocoder.yudao.framework.quartz.config.YudaoAsyncAutoConfiguration

View File

@ -1,9 +0,0 @@
package cn.iocoder.yudao.userserver.framework.async.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
@Configuration
@EnableAsync
public class AsyncConfiguration {
}

View File

@ -1,4 +0,0 @@
/**
* 异步执行基于 Spring @Async 实现
*/
package cn.iocoder.yudao.userserver.framework.async;