日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

线程池方式调用spring mvc的业务类的简单实例

發布時間:2025/4/14 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程池方式调用spring mvc的业务类的简单实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開發環境:springmvc

業務場景: 大字段附件從數據表中遷移到 另外一張表保存文件路徑并存儲文件到磁盤 的小程序。

實現目標:通過url 直接調用一次運行即可成功: http:ip:port/webappname/clfj/transFj.do ,通過多線程方式執行


?

//控制類

@Controller
@RequestMapping("/clfj")
public class ClfjController {

AtomicInteger count= new AtomicInteger(0);// 統計遷移總數類

private static final Logger logger = LoggerFactory.getLogger(ClfjController.class);

@Autowired
private ClFjService clFjService; //處理數據庫和上傳文件的業務類

/**
* 原大字段的附件 遷移到外面 CL_FJ
*
* @author Administrator
* @param response
* @param request
* @throws Exception
*/
@RequestMapping("/transFj.do")
public void transFj(HttpServletResponse response, HttpServletRequest request) throws Exception {
/查詢 需要轉移的數據
List<Map<String, Object>> list = clFjService.queryKfWtFj();

// 構建線程池
ExecutorService pools = Executors.newFixedThreadPool(5);
// 創建可以返回執行結果的線程類
CompletionService<String> completionService = new ExecutorCompletionService<String>(pools);
for(Map<String,Object> map:list)
{ try {
//提交需要單獨執行的每個線程類,業務類作為參數傳遞
completionService.submit(new TransJobThread(map,clFjService));
}catch(Exception e) {
logger.error("====error submit job:",e);
}
}

for(int i=0;i<list.size();i++)
{
try {
//獲取每個線程執行的結果
String rtn= completionService.take().get();
if(rtn.startsWith("ok"))
{
logger.debug("完成第"+count.incrementAndGet()+"條,"+rtn);
}

}catch(Exception e) {
logger.error("====error completionService.take().get():",e);
}
}

try {
//關閉線程池
pools.shutdown();
pools.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS);
} catch (InterruptedException e) {
logger.error("=======關閉線程池:"+e.getMessage());
}
logger.debug("======完成====");


}
}



// 單個線程遷移業務執行模塊
public class TransJobThread implements Callable<String> {
private Map<String,Object> mapObject = null;

private ClFjService clFjService;

public TransJobThread(Map<String, Object> map,ClFjService clFjService) {
this.mapObject = map;
this.clFjService = clFjService;
}

public String call() {
String nd = UtilComm.trim((String) mapObject.get("ND"));
String xh = String.valueOf(((Integer) mapObject.get("XH")));
String filename = nd + "-" + xh + ".doc";
String ret = clFjService.transSingleFj(filename, nd, xh, "KF");
return ret;
}
}


以上如有錯誤之處,請大神們多多指教!!!

轉載于:https://www.cnblogs.com/yinbaicheng/p/10342976.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的线程池方式调用spring mvc的业务类的简单实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。