Spring Data Rest - 设置请求超时
Spring Data Rest - Set request timeout
我有一个 Visit
实体,它通过 ManyToOne
关系引用 Patient
实体。 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);
}
当按 /visits/search/all?keyword=1
的患者 ID 搜索访问时,可能有 return 数百万条记录,查询永远挂起,永远不会结束。在控制台中每秒打印数十条hibernate sql。 如何从服务器端设置请求超时?
我试过了:
- 和
Transactional
带有超时属性的注释到存储库方法:(工作了一点但仍然需要很长时间才能超时)
@RestResource(path="all")
@Transactional(timeout=2)
List<Visit> findByPatientIdContaining(@Param("keyword") String keyword);
- 向
application.properties
添加一些超时属性:(根本不起作用):
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
好的,使用您的 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&size=5
我有一个 Visit
实体,它通过 ManyToOne
关系引用 Patient
实体。 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);
}
当按 /visits/search/all?keyword=1
的患者 ID 搜索访问时,可能有 return 数百万条记录,查询永远挂起,永远不会结束。在控制台中每秒打印数十条hibernate sql。 如何从服务器端设置请求超时?
我试过了:
- 和
Transactional
带有超时属性的注释到存储库方法:(工作了一点但仍然需要很长时间才能超时)
@RestResource(path="all") @Transactional(timeout=2) List<Visit> findByPatientIdContaining(@Param("keyword") String keyword);
- 向
application.properties
添加一些超时属性:(根本不起作用):
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
好的,使用您的 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&size=5