提问者:小点点

Spring数据Rest-设置请求超时时间


我有一个Visit实体,它通过ManyToOne关系引用患者实体。Visit的存储库是:

@RepositoryRestResource(collectionResourceRel = "visits", path = "visits", excerptProjection=VisitProjection.class)
public interface VisitRepository extends PagingAndSortingRepository<Visit, Long> {

    @RestResource(path="all")
    List<Visit> findByPatientIdContaining(@Param("keyword") String keyword);

}

当使用/访问/搜索/所有?关键字=1搜索患者ID的访问时,可能会返回数百万条记录,查询永远挂起并且永远不会结束。在控制台中,每秒打印几十个Hibernatesql。如何从服务器端设置请求超时?

我尝试过:

  1. Transactional带有超时属性的注释到存储库方法:(工作一点,但超时仍然需要很长时间)
@RestResource(path="all")
@Transactional(timeout=2)
List<Visit> findByPatientIdContaining(@Param("keyword") String keyword);
spring.jpa.properties.hibernate.c3p0.timeout=2
spring.jpa.properties.javax.persistence.query.timeout=2
spring.mvc.async.request-timeout=2
server.connection-timeout=2
rest.connection.connection-request-timeout=2
rest.connection.connect-timeout=2
rest.connection.read-timeout=2
server.servlet.session.timeout=2
spring.session.timeout=2
spring.jdbc.template.query-timeout=2
spring.transaction.default-timeout=2
spring.jpa.properties.javax.persistence.query.timeout=2
javax.persistence.query.timeout=2
server.tomcat.connection-timeout=5

共1个答案

匿名用户

好的,使用您的API的人不会希望一次命中数百万条记录,因此请使用提供的分页功能使结果集更易于管理:

https://docs.spring.io/spring-data/rest/docs/3.1.6.RELEASE/reference/html/#paging-and-sorting

@RestResource(path="all")
Page<Visit> findByPatientIdContaining(@Param("keyword") String keyword, Pageable p);

客户端可以通过添加参数来指定他们想要返回的记录:

? page=1