複数のスレッドを使用した春ブーツは、SQL文を実行します

1スレッドの実行結果を取得するためにsubmitSqlコントローラ層、getResultメソッドを使用して、それぞれのSQLメソッドを登録します

dataService.submitSql(uuid,endsql);
return dataService.getResult(uuid);

実行するSQL文のENDSQLは、UUIDは一意エントリスレッド情報を識別しています。

2.情報サービス層は、スレッドプール、およびマルチスレッド実行における方法を定義しています。

  2.1定義スレッドプール情報及び結果フォーマット。

 public static ThreadPoolExecutor executor = new ThreadPoolExecutor(5,10, 5,TimeUnit.MINUTES,new ArrayBlockingQueue<>(5));
 public static HashMap<String, Future<List<LinkedHashMap<String, Object>>>> resultList = new HashMap<String, Future<List<LinkedHashMap<String, Object>>>>();

2.2呼び出し可能な実現方法

public static class SqlTask implements Callable<List<LinkedHashMap<String, Object>>> {

        private String sql;
        private DataMapper dataMapper;

        public SqlTask(String sql, DataMapper dataMapper) {
            this.sql=sql;
            this.dataMapper=dataMapper;
        }

       @Override
        public List<LinkedHashMap<String, Object>> call() throws Exception{
            DBIdentifier.setProjectCode(projectCode);
            List<LinkedHashMap<String,Object>> res=dataMapper.getPublicItems(sql);
            System.out.println("处理sql:"+sql);
            return res;
        }
    }

2.3 SQL文では、タスクに提出しました

public void submitSql(String uuid,String sql){
        Future<List<LinkedHashMap<String, Object>>> result = executor.submit(new SqlTask(sql,dataMapper));
        resultList.put(uuid,result);
}

2.4の結果を得る方法

public CloudwalkResult getResult(String uuid) throws InterruptedException {
     Future f = resultList.get(uuid);
     if(f!=null){
         while(!f.isDone()){
             Thread.sleep(100);
             System.out.println("还没有执行完....");
         }
         System.out.println("执行完毕");
         List<LinkedHashMap<String, Object>> r = null;
         try {
             r = (List<LinkedHashMap<String, Object>>) f.get();
             resultList.remove(uuid);
         } catch (Exception e) {
             return  CloudwalkResult.fail("1",e.getMessage());
         }
         return CloudwalkResult.success(r);
     }else{
         System.out.println("任务不存在");
     }
     return null;
}

 

公開された36元の記事 ウォン称賛19 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_27182767/article/details/105044631