java子線程解決獲取主線程的request對象問題
java子線程獲取主線程的request對象
問題描述
業(yè)務(wù)系統(tǒng),多線程處理業(yè)務(wù)是提供性能方法之一,在使用中,我們會將某些數(shù)據(jù)存儲在request中,傳給后面的組件使用,不需要在方法中定義變量來傳遞,提高代碼的美觀可讀性,
我們使用request.setAttribute(“xxxx”, “xxxx”)方式傳遞參數(shù),后面的組件或方法使用如下代碼獲取參數(shù):
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); Object param = request.getAttribute(“xxxx”);
在主線程下這么寫是沒問題的,但是子線程下request 對象是空的,子線程不共享主線程的request對象
解決辦法
在啟動線程前,執(zhí)行以下代碼即可,子線程也可以共享主線程的request對象
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); RequestContextHolder.setRequestAttributes(sra, true);
示例

多線程子線程獲取不到主線程的request
使用多線程時有時候會碰到子線程獲取不到主線程的request
原因是子線程還未執(zhí)行完成而主線程已經(jīng)執(zhí)行完畢則導(dǎo)致子線程獲取不到
我們只需要加上兩句代碼即可
// RequestAttributes對象設(shè)置為子線程共享 // 解決開啟多線程時子線程獲取不到主線程的request ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); RequestContextHolder.setRequestAttributes(attributes, true);
我還遇到一個問題則是即時按照上面設(shè)置共享,但是獲取不到主線程的header,目前使用了一個笨方法則是把主線程的header需要使用的參數(shù)在主線程內(nèi)拿出來定義一個變量提供給子線程使用。。。
mysql觸發(fā)器語法注意事項
注意點:
1. 在if條件里的必須是變量(@xxx)
2. set分號結(jié)尾
3. end if注意分號結(jié)尾
4. 條件中執(zhí)行的sql語句注意分號結(jié)尾例子:Navicat 創(chuàng)建觸發(fā)器

BEGIN set @dataTime = date(new.dataTime); set @nowTime = date(now()); set @yearDT = year(new.dataTime); set @monthDT = month(new.dataTime); set @yearN = year(now()); set @monthN = month(now()); if @dataTime = @nowTime then insert into t_senor_data_day values(new.id,new.deviceId,new.senorId,new.tenantId,new.dataValue,new.dataTime,new.receiveTime,new.taskType,new.paramType,new.senorType); end if; if @yearDT = @yearN and @monthDT = @monthN then insert into t_senor_data_month values(new.id,new.deviceId,new.senorId,new.tenantId,new.dataValue,new.dataTime,new.receiveTime,new.taskType,new.paramType,new.senorType); end if; end
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java開發(fā)學(xué)習(xí) Java數(shù)組操作工具
這篇文章主要為大家詳細(xì)介紹了自己編寫的Java數(shù)組操作工具,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
SpringBoot創(chuàng)建并簡單使用的實現(xiàn)
這篇文章主要介紹了SpringBoot創(chuàng)建并簡單使用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
mybatis的association傳遞參數(shù)問題示例
這篇文章主要介紹了mybatis的association傳遞參數(shù)問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
Spring Boot開發(fā)Web應(yīng)用詳解
這篇文章主要介紹了Spring Boot開發(fā)Web應(yīng)用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Spring?Boot監(jiān)控SQL運行情況的全過程
這篇文章主要給大家介紹了關(guān)于Spring?Boot監(jiān)控SQL運行情況的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-02-02
使用Idea快速搭建SpringMVC項目的詳細(xì)步驟記錄
這篇文章主要給大家介紹了關(guān)于使用Idea快速搭建SpringMVC項目的詳細(xì)步驟,Spring?MVC是一種基于MVC模式的框架,它是Spring框架的一部分,它提供了一種更簡單和更有效的方式來構(gòu)建Web應(yīng)用程序,需要的朋友可以參考下2024-05-05

