我正在获取dynamo db中的所有记录,对于每条记录,我都要对一个外部服务进行多线程调用。
但是我得到了这个错误:
嵌套异常是java.util.concurrent.executionException:org.springframework.web.client.HttpServererRoreXception:500 null]
@Autowired
public RestTemplate restTemplate;
@Autowired
public MyCallable myCallable;
@GetMapping("/myApp-multithread")
public String getQuoteOnSepThread() throws InterruptedException, ExecutionException {
System.out.println("#################################################Multi Threaded Post Call######################");
ExecutorService executor= Executors.newFixedThreadPool(10);
List<Future<String>> myFutureList= new ArrayList<Future<String>>();
long startTime=System.currentTimeMillis()/1000;
Iterable<Customer> customerIterable=repo.findAll();
List<Customer> customers=new ArrayList<Customer>();
customerIterable.forEach(customers::add);
for(Customer c:customers) {
myCallable.sendCustomerToInterface(c);
//System.out.println(c);
Future<String> future= executor.submit(myCallable);
myFutureList.add(future);
}
for(Future<String> fut:myFutureList) {
fut.get();
}
executor.shutdown();
long timeElapsed= (System.currentTimeMillis()/1000)-startTime;
System.out.println("->>>>>>>>>>>>>>>Time Elapsed In Multi Threaded Post Call<<<<<<<<<<<<<<<-"+timeElapsed);
return "Success";
}
public class MyCallable implements Callable<String>{
@Autowired
public RestTemplate restTemplate;
//int index=-1;
Customer c= c= new Customer();;
public void sendCustomerToInterface(Customer cust) {
c= cust;
}
@Override
public String call() throws Exception {
System.out.println("Customer no"+ c.getId() +"On thread Number"+Thread.currentThread().getId());
return restTemplate.postForObject("http://localhost:3000/save", c, String.class);
}
}
编辑:
错误的完整堆栈跟踪:
org.springframework.web.client.httpserverroreXception:500 null at org.springframework.web.client.defaultresponseerrorhandler.handleerror(defaultresponseerrorhandler.java:88)~[spring-web-4.3.13.release.jar:4.3.13.release]at org.springframework.web.client.resttemplate.handleresponse ase.jar:4.3.13.发布]在org.springframework.web.client.resttemplate.execute(resttemplate.java:620)~[spring-web-4.3.13.release.jar:4.3.13.发布]在org.springframework.web.client.resttemplate.postforObject(resttemplate.java:387)~[spring-web-4.3.13.release]在com.ocademoclient.ocademoclient.mycallable.call~[classes/:na]在java.util.concurrent.futureTask.run(FutureTask.java:266)~[na:1.8.0_181]在java.util.concurrent.threadpoolexecutor.java:1149)~[na:1.8.0_181]at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:624)~[na:1.8.0_181]at java.lang.thread.run(thread.java:748)[na:1.8.0_181]
根据Javadoc:
试图检索通过引发异常而中止的任务的结果时引发的异常。
问题似乎是,对于一些客户
restTemplate.postForObject("http://localhost:3000/save", c, String.class);
这是行不通的,因为您的MyCallable
是一个有状态对象(它使用void sendCustomerToInterface(Customer cust)
存储Customer
存储Customer
,并且需要稍后在Call()
方法中检索这个特定的Customer
)。
要使其工作,可以重写MyCallable
,如下所示:
public class MyCallable implements Callable<String>{
private RestTemplate restTemplate;
private Customer c;
public MyCallable(RestTemplate rt, Customer cust) {
this.restTemplate = rt;
this.c = cust;
}
@Override
public String call() throws Exception {
System.out.println("Customer no"+ c.getId() +"On thread Number"+Thread.currentThread().getId());
return restTemplate.postForObject("http://localhost:3000/save", c, String.class);
}
}
在控制器中编写
for(Customer c:customers) {
MyCallable myCallable = new MyCallable(restTemplate, c);
//System.out.println(c);
Future<String> future= executor.submit(myCallable);
myFutureList.add(future);
}
for (Customer c: repo.findAll()) {
//...
}
问题内容: 我在Spring中使用javax-validation和hibaernate-validator进行表单验证。除了用于Spring的基本必要JAR文件。 我包括: 验证API-1.1.0.Final hibernate-validator-5.1.0.Final 我读到某处也关注到了spl4j版本:所以我也告诉: 错误原因可以归因于slf4j和log4j兼容性吗? 我使用注释基础验证。
我使用Spring+Hibernate+MySQL for web应用程序进行开发。但是在过去的一周里,我总是在尝试运行orgdao.findAll()获取所有组织时遇到“nested exception is org.springframework.dao.invalidDataAccessResourceUsageException:”异常。即使我评论所有的关系属性,但仍然没有幸运。以下是代码
我在我的项目中使用Spring引导和Spring数据,我有两个类: 第二类是: 添加任务的方法: 当我试图添加一个新的任务,它给出了这个错误: “找不到id为2的com.carpooling.entity.Station;嵌套异常为javax.persistence.EntityNotFoundException:找不到id为2的com.carpooling.entity.Station” 下面是
异常: 嵌套任务透传 重新处理生成器嵌套,需要将子生成器异常抛向父生成器。 当生成器迭代过程发生未捕获异常,生成器将会被关闭,Generator::valid返回false,未捕获异常会从生成器内部被抛向父作用域,嵌套子生成器内部的未捕获异常必须最终被抛向根生成器的calling frame,PHP7中yield-from对嵌套子生成器resume时产生的异常,采取goto try_again传递
堆栈跟踪: 配置xml 我的主要课程: 我还试着加上:aopalliance.jar SO上也有类似的问题:Spring嵌套异常java.lang.NoClassDefFoundError: org/aopAlliance/aop/建议 ###########编辑###########更新:项目中的其他类## Minstrel.java 勇敢的night.java 拯救少女探索。JAVA
我在Spring中使用javax-validation和hibaernate-validator进行表单验证。而不是Spring所必需的基本JAR文件。 我在某处读到spl4j版本也受到关注,所以我也告诉大家: 错误的原因会不会是由于slf4j和log4j的兼容性? 我使用基于注释的验证。