怎么做网站作业,计算机培训班培训费用,网站的备案all,新媒体seo培训文章目录1. 启动类添加EnableAsync注解2. 异步方法添加Async注解3. 自定义线程池以及线程池异常策略1. 启动类添加EnableAsync注解
package com.gblfy;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplicat…
文章目录1. 启动类添加EnableAsync注解2. 异步方法添加Async注解3. 自定义线程池以及线程池异常策略1. 启动类添加EnableAsync注解
package com.gblfy;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;EnableAsync
SpringBootApplication
public class JavaEscapeApplication {public static void main(String[] args) {SpringApplication.run(JavaEscapeApplication.class, args);}}2. 异步方法添加Async注解
package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;import java.util.concurrent.Future;Slf4j
Service
public class AsyncService {Asyncpublic void asyncProcess01() throws Exception {log.info(AsyncService Start to asyncProcess01 -{}, Thread.currentThread().getName());Thread.sleep(2000);log.info(AsyncService Start to asyncProcess01 -{}, Thread.currentThread().getName());}Asyncpublic FutureString asyncProcess02() throws Exception {log.info(AsyncService Start to asyncProcess02-{}, Thread.currentThread().getName());Thread.sleep(2000);log.info(AsyncService Done to asyncProcess02-{}, Thread.currentThread().getName());return new AsyncResult(imooc);}Asyncpublic void asyncProcess03() {log.info(AsyncService Start to asyncProcess03-{}, Thread.currentThread().getName());throw new RuntimeException(throw exception asyncProcess03);}
}
3. 自定义线程池以及线程池异常策略
package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;/*** 自定义异步任务线程池*/
Slf4j
Configuration
public class AsyncTaskConfig implements AsyncConfigurer {Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setThreadNamePrefix(cmiip-);executor.setCorePoolSize(15);executor.setMaxPoolSize(20);executor.setKeepAliveSeconds(5);executor.setQueueCapacity(100);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());executor.setWaitForTasksToCompleteOnShutdown(true);executor.setAwaitTerminationSeconds(60);executor.initialize();return executor;}Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return new AsyncUncaughtExceptionHandler() {Overridepublic void handleUncaughtException(Throwable ex, Method method, Object... params) {// 报警邮件发短信等等log.error(async task some Error: {} ,{} , {}, ex.getMessage(),method.getDeclaringClass().getName() . method.getName(),Arrays.toString(params));}};}
}
测试
package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;Slf4j
SpringBootTest
class AsyncServiceTest {Autowiredprivate AsyncService asyncService;Testvoid contextLoads() throws Exception {
// asyncService.asyncProcess01();FutureString future asyncService.asyncProcess02();log.info(Async Process02 return :-{}, future.get(1, TimeUnit.SECONDS));}Testvoid contextLoads2() throws Exception {asyncService.asyncProcess03();Thread.sleep(3000);}
}