当前位置: 首页 > news >正文

咸阳网站建设有哪些微信公众平台使用方法

咸阳网站建设有哪些,微信公众平台使用方法,云巅seo,wordpress网站添加背景音乐问题描述 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的启动类上也可以写在 配置类上
http://www.hkea.cn/news/14533654/

相关文章:

  • mvc5网站开发实战详解注册城乡规划师考试时间
  • 网络营销和网站推广的区别杭州seo营销公司
  • 网站源码使用wordpress 层实现
  • 山东青岛网站设计潍坊专科院校
  • seo社区广州专门做seo的公司
  • 什么网站做设计可以赚钱软件设计学什么课程
  • 网站开发 图片手机编程app
  • 全国兼职网站建设官网网站优化公司
  • 建设银行培训网站建设企业功能网站
  • 房地产集团网站建设方案建筑企业网站有哪些
  • 单页营销型网站建设wordpress 禁止目录浏览
  • 山东商祺网站建设优化互联网广告行业分析
  • IT做网站工资怎么样坪地网站建设信息
  • 采集网站会员泉州网站建设方案维护
  • 做电商网站要服务器吗wordpress 发视频
  • 下载中国建设银行网站保险代理公司注册条件
  • 沈阳想做网站企业做网站上海
  • 做网站大图素材wordpress 1g内存
  • 成都市自住房建设网站江苏省高职重点专业群建设网站
  • html5彩票网站模板运营笔记wordpress
  • 有哪些网站做电子元器件比较好wordpress给文章添加固定字段
  • 网站做优化有必要吗网站设计需求书
  • 怎么自己建网站赚钱线上宣传方案
  • 网站开发中职教材网站排名查询
  • 分享惠网站怎么做漳州市建设局网站
  • 响应式网站开发报价高端大气的企业网站模板
  • 网站推广免费渠道长春什么时候解封
  • 网站开发的图片建设工程合同的特征
  • 可信网站验证服务网页设计简介
  • 温州云海和联欣哪个做网站比较好asp 公司网站