申请完域名如何建网站专门查企业信息的网站
- 作者: 五速梦信息网
- 时间: 2026年04月20日 09:22
当前位置: 首页 > news >正文
申请完域名如何建网站,专门查企业信息的网站,贵阳市小程序网站开发公司,网站开发专业的建设设想问题描述 springboot项目中#xff0c;需要使用到异步调用某个方法#xff0c;此时 第一个想到的就是 Async 注解#xff0c;但是 发现 方法执行报错了#xff0c;具体报错如下#xff1a; java.lang.NullPointerExceptionat com.ruoyi.common.utils.ServletUtils.getRe…问题描述 springboot项目中需要使用到异步调用某个方法此时 第一个想到的就是 Async 注解但是 发现 方法执行报错了具体报错如下 java.lang.NullPointerExceptionat com.ruoyi.common.utils.ServletUtils.getRequest(ServletUtils.java:56)at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:782)at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:717)at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:443)at com.ruoyi.web.ecs.service.impl.EcsCollectOperateServiceImpl.collect(EcsCollectOperateServiceImpl.java:42)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)at java.lang.reflect.Method.invoke(Method.java:508)at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda\(invoke\)0(AsyncExecutionInterceptor.java:115)at java.util.concurrent.FutureTask.run(FutureTask.java:277)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)at java.lang.Thread.run(Thread.java:825)上面日志有点多其实核心就是这一部分日志 java.lang.NullPointerExceptionat com.ruoyi.common.utils.ServletUtils.getRequest(ServletUtils.java:56)这块逻辑就是使用spring底层提供的获取上下文信息的方法。 所以说明 获取不到上下文信息结果导致报错 解决办法 对自定义的配置类 进行改造原来的配置类是这样的 import java.lang.reflect.Method; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; 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 EnableAsync public class AsyncConfiguration {private static final Logger logger LoggerFactory.getLogger(AsyncConfiguration.class);Bean(name taskExecutor)public Executor getAsyncExecutor() {ThreadPoolTaskExecutor taskExecutor new ThreadPoolTaskExecutor();// 核心线程数线程池创建时候初始化的线程数taskExecutor.setCorePoolSize(10);// 最大线程数线程池最大的线程数只有在缓冲队列满了之后才会申请超过核心线程数的线程taskExecutor.setMaxPoolSize(20);// 缓冲队列用来缓冲执行任务的队列taskExecutor.setQueueCapacity(50);// 允许线程的空闲时间60秒当超过了核心线程之外的线程在空闲时间到达之后会被销毁taskExecutor.setKeepAliveSeconds(60);// 线程池名的前缀设置好了之后可以方便我们定位处理任务所在的线程池taskExecutor.setThreadNamePrefix(HiTask-);// 缓冲队列满了之后的拒绝策略由调用线程处理一般是主线程//taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());taskExecutor.initialize();return taskExecutor;}class MyAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {Overridepublic void handleUncaughtException(Throwable throwable, Method method, Object… objects) {logger.error(MethodName{},Throwable{},method.getName(),throwable.toString());}} } 改造之后 import java.lang.reflect.Method; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder;Configuration EnableAsync public class AsyncConfiguration {private static final Logger logger LoggerFactory.getLogger(AsyncConfiguration.class);Bean(name taskExecutor)public Executor getAsyncExecutor() {ThreadPoolTaskExecutor taskExecutor new ThreadPoolTaskExecutor();// 核心线程数线程池创建时候初始化的线程数taskExecutor.setCorePoolSize(10);// 最大线程数线程池最大的线程数只有在缓冲队列满了之后才会申请超过核心线程数的线程taskExecutor.setMaxPoolSize(20);// 缓冲队列用来缓冲执行任务的队列taskExecutor.setQueueCapacity(50);// 允许线程的空闲时间60秒当超过了核心线程之外的线程在空闲时间到达之后会被销毁taskExecutor.setKeepAliveSeconds(60);// 线程池名的前缀设置好了之后可以方便我们定位处理任务所在的线程池taskExecutor.setThreadNamePrefix(HiTask-);// 缓冲队列满了之后的拒绝策略由调用线程处理一般是主线程//taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());taskExecutor.initialize();//解决使用Async注解获取不到上下文信息的问题taskExecutor.setTaskDecorator(runnable - {RequestAttributes requestAttributes RequestContextHolder.currentRequestAttributes();return ()-{try {// 我们set 进去 ,其实是一个ThreadLocal维护的.RequestContextHolder.setRequestAttributes(requestAttributes);runnable.run();} finally {// 最后记得释放内存RequestContextHolder.resetRequestAttributes();}};});return taskExecutor;}class MyAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {Overridepublic void handleUncaughtException(Throwable throwable, Method method, Object… objects) {logger.error(MethodName{},Throwable{},method.getName(),throwable.toString());}} } 总结 解决使用Async注解获取不到上下文信息的问题只需要增加这一段代码即可 taskExecutor.setTaskDecorator(runnable - {RequestAttributes requestAttributes RequestContextHolder.currentRequestAttributes();return ()-{try {// 我们set 进去 ,其实是一个ThreadLocal维护的.RequestContextHolder.setRequestAttributes(requestAttributes);runnable.run();} finally {// 最后记得释放内存RequestContextHolder.resetRequestAttributes();}};});额外补充一点 如果使用 Async注解发现没有生效那有可能 你没有加 EnableAsync 注解。 EnableAsync注解表示 开启异步任务可以写在springboot的启动类上也可以写在 配置类上
- 上一篇: 申请完域名如何建网站南宁建站模板源码
- 下一篇: 申请网站建设费用的请示公共资源交易网
相关文章
-
申请完域名如何建网站南宁建站模板源码
申请完域名如何建网站南宁建站模板源码
- 技术栈
- 2026年04月20日
-
申请免费个人网站和域名山东市网站建设
申请免费个人网站和域名山东市网站建设
- 技术栈
- 2026年04月20日
-
申请建设网站的报告书国内做网上旅游业务的网站
申请建设网站的报告书国内做网上旅游业务的网站
- 技术栈
- 2026年04月20日
-
申请网站建设费用的请示公共资源交易网
申请网站建设费用的请示公共资源交易网
- 技术栈
- 2026年04月20日
-
申请微信支付公司网站网站购物车实现
申请微信支付公司网站网站购物车实现
- 技术栈
- 2026年04月20日
-
申请一个网站需要多少钱装修公司资质
申请一个网站需要多少钱装修公司资质
- 技术栈
- 2026年04月20日
