Spring RestTemplate与Google应用程序引擎
我有一个带有Spring框架的GoogleAppEngine应用程序,它必须向另一个公开RESTAPI的Spring启动应用程序发出带有列表的post请求。 我正在使用RestTemplate调用api 在GAE应用程序中,我执行以下操作:Spring RestTemplate与Google应用程序引擎,spring,sockets,google-app-engine,spring-data-neo4j,resttemplate,Spring,Sockets,Google App Engine,Spring Data Neo4j,Resttemplate,我有一个带有Spring框架的GoogleAppEngine应用程序,它必须向另一个公开RESTAPI的Spring启动应用程序发出带有列表的post请求。 我正在使用RestTemplate调用api 在GAE应用程序中,我执行以下操作: restTemplate.postForObject(NEO4J_URL_VERTEX, vertices, List.class); Spring引导应用程序连接到本地Neo4j数据库。在NEO4J_URL_VERTEX中,我使用以下方法将顶点保存到数据
restTemplate.postForObject(NEO4J_URL_VERTEX, vertices, List.class);
Spring引导应用程序连接到本地Neo4j数据库。在NEO4J_URL_VERTEX
中,我使用以下方法将顶点保存到数据库中:
@Transactional
@RequestMapping(value = "vertex/all", method = RequestMethod.POST, consumes = "application/json")
public void addVertex(@RequestBody List<Vertex> vertices) {
for (Vertex v : vertices) {
Vertex old = vertexService.findByEmail(v.getEmail());
if (old == null) {
vertexService.create(v);
}
}
}
这里需要注意的重要一点是,顶点保存到Neo4j数据库。这没有问题。GAE应用程序使用对象列表发出post请求,但一段时间后(大约1秒)关闭套接字,因为显然这太长了。但是带有Neo4j的Spring应用程序继续写入顶点,最终它们都保存到数据库中
我已经尝试在GAE应用程序中迭代列表,并为每个顶点写一篇文章,但是如果顶点对象很大(即有许多队友),我会再次遇到相同的错误。
顶点对象定义为:
public class Vertex {
private Long id;
private String name;
@Index(unique=true)
private String email;
@Index(unique=true)
private Long universeUserId;
@Relationship(type="WORKS_WITH", direction = Relationship.OUTGOING)
private List<Edge> teammates;
//getters,setters
}
但这没有帮助。此外,来自GAE应用程序的发布顶点的方法是从Appengine的
任务队列
它有10分钟的时间限制,所以这不是问题。目前,这两个应用程序都在本地主机上运行。
非常感谢您的帮助 您正在创建多少个对象?我怀疑这不是spring数据问题。@MihaiRaulea 61顶点对象。这不是spring的数据问题,没错。我认为这是谷歌应用程序引擎的问题。如果我使用Postman或任何Rest客户机的顶点列表调用Spring Boot应用程序的post方法,那么在Neo4j db中保存数据不会有问题。实际上,即使我从GAE应用程序调用它,顶点也会被保存。但在GAE中我得到了那个错误,那个套接字连接被取消了。。。
public class Vertex {
private Long id;
private String name;
@Index(unique=true)
private String email;
@Index(unique=true)
private Long universeUserId;
@Relationship(type="WORKS_WITH", direction = Relationship.OUTGOING)
private List<Edge> teammates;
//getters,setters
}
RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory());
private ClientHttpRequestFactory clientHttpRequestFactory() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(50000);
factory.setConnectTimeout(50000);
return factory;
}