先上代码
@Override
@Transactional
public void test2() throws InterruptedException {
iApplyInfoService.save1();
iApplyInfoService.getByRequestReq1("");
}
@Override
@Transactional
public void save1() {
ApplyInfo applyInfo1 = new ApplyInfo();
applyInfo1.setRequestSeq(IdWorker.getId()+"");
save(applyInfo1);
}
@Override
@Async(ThreadPoolConfig.THREAD_POOL_NAME)
public ApplyInfo getByRequestReq1(String requestReq) throws InterruptedException {
Thread.sleep(500);
return null;
}
@EnableAsync(proxyTargetClass = true)
@Configuration
public class ThreadPoolConfig {
public static final String THREAD_POOL_NAME= "ThreadPool";
@Bean(name = THREAD_POOL_NAME)
public Executor initThreadPoolExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(1);
// 设置最大线程数
executor.setMaxPoolSize(1);
// 设置队列容量
executor.setQueueCapacity(0);
// 设置线程活跃时间(秒)
executor.setKeepAliveSeconds(50);
// 设置默认线程名称
executor.setThreadNamePrefix("-thread-");
// 设置拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
executor.initialize();
return executor;
}
}
1、将线程池参数调到最小,并将队列设置为0
2、设置拒绝策略为抛弃并抛异常
jmeter设置50请求/s
线程池大部分拒绝,实际只处理了3个任务
且事务正常回滚,50个请求,只存储了3个,且请求不连续,因为被回滚掉了。
总结:想都是问题,做都是答案。