gpt4 book ai didi

java - 使用 Spring Boot 和 Hibernate 执行多个不同的查询

转载 作者:行者123 更新时间:2023-12-02 09:22:54 24 4
gpt4 key购买 nike

我的要求是创建多个线程并执行查询并给出最终输出,如 Map<String,List<Object>>;

Map 包含表名字符串和 List<Object>是包含表记录列表的查询输出。

要求:

  • 我有一个表,其中包含 TableName 和 Query 等字段列表

    例如。

    雇用|从雇用中选择*;该查询有超过 100000 条记录雇用详细信息|从雇佣详细信息中选择*;该查询有超过 300000 条记录雇佣工资|从雇佣工资中选择*;该查询有超过 600000 条记录

上表可能有 10 000 个查询

我想使用 spring boot + hibernate 为上述查询创建一个 API。

我的问题:

我想使用 JAVA 8 创建一个具有多线程的解决方案。

 @RestController
public class ApiQueries {
@RequestMapping(value = "/getAllQueries", method = RequestMethod.GET)

public CommonDTO getAllQuery(){

list=apiQueryService.findAll();
if(null!=list){
objectMap= apiQueryService.executeQueryData(list); //here apiQueryService have one method named is executeQuery()
}
}
}

我在该方法中编写了以下逻辑。

@Override
public Map<String,List<Object>> executeQueryData(List<ApiQueries>
apiQuerylist, String fromDate, String toDate) {
addExecutor = new ThreadPoolExecutor(3, 5, 10, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
List<Object> obj=null;

Map<String,List<Object>> returnMap=new HashMap<String,List<Object>>();
try {

if(session==null) {
session = sessionFactory.openSession();
}
apiQuerylist.forEach(list-> addExecutor.execute(new Runnable() {
@Override
public void run() {
apiQueryObject = session.createSQLQuery(list.getQuery()).list();
returnMap.put(list.getTableName(), apiQueryObject);
}

}));
}catch(Exception ex) {
System.out.println("Inside [B] Exception "+ex);
ex.printStackTrace();
}finally {
if(session !=null) {
session.close();
}
}
return returnMap;
}

问题是当我调用该 api 时,下面的代码将在后台运行,并且该方法返回 null 对象,但在后台我将看到一一执行的查询列表

apiQuerylist.forEach(list-> addExecutor.execute(new Runnable() {
@Override
public void run() {
apiQueryObject = session.createSQLQuery(list.getQuery()).list();
returnMap.put(list.getTableName(), apiQueryObject);
}

}));

最佳答案

您需要等待线程池完成。 apiQuerylist.forEach 之后类似下面的内容应该可以工作:

addExecutor.shutdown();
// waiting for executors to finish their jobs
while (!addExecutor.awaitTermination(50, TimeUnit.MILLISECONDS));

关于java - 使用 Spring Boot 和 Hibernate 执行多个不同的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58555664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com