中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

手機(jī)網(wǎng)站開(kāi)發(fā)注意友情鏈接怎么購(gòu)買(mǎi)

手機(jī)網(wǎng)站開(kāi)發(fā)注意,友情鏈接怎么購(gòu)買(mǎi),政府網(wǎng)站建設(shè)問(wèn)題分析,做代購(gòu)有哪些網(wǎng)站問(wèn)題描述 springboot項(xiàng)目中,需要使用到異步調(diào)用某個(gè)方法,此時(shí) 第一個(gè)想到的就是 Async 注解,但是 發(fā)現(xiàn) 方法執(zhí)行報(bào)錯(cuò)了,具體報(bào)錯(cuò)如下: java.lang.NullPointerExceptionat com.ruoyi.common.utils.ServletUtils.getRe…

問(wèn)題描述

springboot項(xiàng)目中,需要使用到異步調(diào)用某個(gè)方法,此時(shí) 第一個(gè)想到的就是 @Async 注解,但是 發(fā)現(xiàn) 方法執(zhí)行報(bào)錯(cuò)了,具體報(bào)錯(cuò)如下:

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)

上面日志有點(diǎn)多,其實(shí)核心就是這一部分日志:

java.lang.NullPointerExceptionat com.ruoyi.common.utils.ServletUtils.getRequest(ServletUtils.java:56)

這塊邏輯就是,使用spring底層提供的獲取上下文信息的方法。
所以說(shuō)明 獲取不到上下文信息,結(jié)果導(dǎo)致報(bào)錯(cuò)

解決辦法

  • 對(duì)自定義的配置類(lèi) 進(jìn)行改造,原來(lái)的配置類(lèi)是這樣的:

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();// 核心線程數(shù):線程池創(chuàng)建時(shí)候初始化的線程數(shù)taskExecutor.setCorePoolSize(10);// 最大線程數(shù):線程池最大的線程數(shù),只有在緩沖隊(duì)列滿了之后才會(huì)申請(qǐng)超過(guò)核心線程數(shù)的線程taskExecutor.setMaxPoolSize(20);// 緩沖隊(duì)列:用來(lái)緩沖執(zhí)行任務(wù)的隊(duì)列taskExecutor.setQueueCapacity(50);// 允許線程的空閑時(shí)間60秒:當(dāng)超過(guò)了核心線程之外的線程在空閑時(shí)間到達(dá)之后會(huì)被銷(xiāo)毀taskExecutor.setKeepAliveSeconds(60);// 線程池名的前綴:設(shè)置好了之后可以方便我們定位處理任務(wù)所在的線程池taskExecutor.setThreadNamePrefix("HiTask-");// 緩沖隊(duì)列滿了之后的拒絕策略:由調(diào)用線程處理(一般是主線程)//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();// 核心線程數(shù):線程池創(chuàng)建時(shí)候初始化的線程數(shù)taskExecutor.setCorePoolSize(10);// 最大線程數(shù):線程池最大的線程數(shù),只有在緩沖隊(duì)列滿了之后才會(huì)申請(qǐng)超過(guò)核心線程數(shù)的線程taskExecutor.setMaxPoolSize(20);// 緩沖隊(duì)列:用來(lái)緩沖執(zhí)行任務(wù)的隊(duì)列taskExecutor.setQueueCapacity(50);// 允許線程的空閑時(shí)間60秒:當(dāng)超過(guò)了核心線程之外的線程在空閑時(shí)間到達(dá)之后會(huì)被銷(xiāo)毀taskExecutor.setKeepAliveSeconds(60);// 線程池名的前綴:設(shè)置好了之后可以方便我們定位處理任務(wù)所在的線程池taskExecutor.setThreadNamePrefix("HiTask-");// 緩沖隊(duì)列滿了之后的拒絕策略:由調(diào)用線程處理(一般是主線程)//taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());taskExecutor.initialize();//解決使用@Async注解,獲取不到上下文信息的問(wèn)題taskExecutor.setTaskDecorator(runnable -> {RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();return ()->{try {// 我們set 進(jìn)去 ,其實(shí)是一個(gè)ThreadLocal維護(hù)的.RequestContextHolder.setRequestAttributes(requestAttributes);runnable.run();} finally {// 最后記得釋放內(nèi)存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());}}
}

總結(jié)

解決使用@Async注解,獲取不到上下文信息的問(wèn)題,只需要增加這一段代碼即可

 taskExecutor.setTaskDecorator(runnable -> {RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();return ()->{try {// 我們set 進(jìn)去 ,其實(shí)是一個(gè)ThreadLocal維護(hù)的.RequestContextHolder.setRequestAttributes(requestAttributes);runnable.run();} finally {// 最后記得釋放內(nèi)存RequestContextHolder.resetRequestAttributes();}};});

額外補(bǔ)充一點(diǎn)

如果使用 @Async注解,發(fā)現(xiàn)沒(méi)有生效,那有可能 你沒(méi)有加 @EnableAsync 注解。
@EnableAsync注解表示 開(kāi)啟異步任務(wù),可以寫(xiě)在springboot的啟動(dòng)類(lèi)上,也可以寫(xiě)在 配置類(lèi)上

http://www.risenshineclean.com/news/46879.html

相關(guān)文章:

  • 建企業(yè)網(wǎng)站建設(shè)注意問(wèn)題網(wǎng)站搭建平臺(tái)
  • 坂田做網(wǎng)站的公司海外推廣代理商
  • 制作企業(yè)網(wǎng)站的基本步驟愛(ài)鏈接
  • wordpress圖片超鏈接aso優(yōu)化平臺(tái)
  • 前端開(kāi)發(fā)工具vscode網(wǎng)站關(guān)鍵詞優(yōu)化公司
  • WordPress評(píng)論加入ip合肥seo推廣排名
  • 建設(shè)銀行金牛支行網(wǎng)站營(yíng)銷(xiāo)平臺(tái)
  • 網(wǎng)站策劃模板百度推廣費(fèi)用
  • 中國(guó)信用網(wǎng)官網(wǎng)查詢(xún)?nèi)肟谥貞cseo全網(wǎng)營(yíng)銷(xiāo)
  • 深圳做網(wǎng)站 信科網(wǎng)絡(luò)seo研究中心學(xué)員案例
  • 中國(guó)建行網(wǎng)站北京seo公司排名
  • wordpress幻燈片名seo搜索引擎優(yōu)化實(shí)訓(xùn)
  • C語(yǔ)言網(wǎng)站開(kāi)發(fā)pdf抖音矩陣排名軟件seo
  • 南京網(wǎng)站開(kāi)發(fā)培訓(xùn)鄭州做網(wǎng)絡(luò)優(yōu)化的公司
  • 如何制作網(wǎng)站app重慶森林電影
  • 重慶政府a(chǎn)pp渝快辦深圳債務(wù)優(yōu)化公司
  • 網(wǎng)站制作要花多少錢(qián)百度一下百度網(wǎng)站
  • 旅游電子商務(wù)的三創(chuàng)賽網(wǎng)站建設(shè)鳳山網(wǎng)站seo
  • 鵬牛網(wǎng)做網(wǎng)站怎么樣章魚(yú)磁力鏈接引擎
  • H5網(wǎng)站建設(shè)報(bào)價(jià)多少網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣系統(tǒng)
  • 交互設(shè)計(jì)包含網(wǎng)站設(shè)計(jì)長(zhǎng)清區(qū)seo網(wǎng)絡(luò)優(yōu)化軟件
  • 做網(wǎng)站時(shí) 404網(wǎng)頁(yè)如何指向作品推廣
  • 網(wǎng)站那個(gè)做的比較好html+css網(wǎng)頁(yè)制作成品
  • 用源代碼做網(wǎng)站2020國(guó)內(nèi)十大小說(shuō)網(wǎng)站排名
  • 什么是門(mén)戶(hù)網(wǎng)站廣告我想自己建立一個(gè)網(wǎng)站
  • 動(dòng)畫(huà)畢業(yè)設(shè)計(jì)代做網(wǎng)站鄭州百度網(wǎng)站優(yōu)化排名
  • 圖片類(lèi)網(wǎng)站建設(shè)百度推廣年費(fèi)多少錢(qián)
  • 搜索引擎網(wǎng)站有哪些windows優(yōu)化大師是哪個(gè)公司的
  • 電子商務(wù)網(wǎng)站建設(shè)問(wèn)題百度游戲app下載
  • 怎么用視頻做網(wǎng)站背景重慶seo優(yōu)化公司