java子線程解決獲取主線程的request對象問題
java子線程獲取主線程的request對象
問題描述
業(yè)務系統(tǒng),多線程處理業(yè)務是提供性能方法之一,在使用中,我們會將某些數(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í)行完畢則導致子線程獲取不到
我們只需要加上兩句代碼即可
// RequestAttributes對象設置為子線程共享 // 解決開啟多線程時子線程獲取不到主線程的request ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); RequestContextHolder.setRequestAttributes(attributes, true);
我還遇到一個問題則是即時按照上面設置共享,但是獲取不到主線程的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實現(xiàn)企業(yè)微信回調(diào)配置的詳細步驟與測試
這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)企業(yè)微信回調(diào)配置的詳細步驟與測試,企業(yè)微信回調(diào)是指企業(yè)微信通過HTTP?POST請求將業(yè)務數(shù)據(jù)回調(diào)到指定的URL上,文中給出了詳細的代碼示例,需要的朋友可以參考下2023-09-09