spring-data-jpa Spring Boot Oracle JPA设置查询超时

szqfcxe2  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(439)

我正在使用Sping Boot with Ojdbc8 18.3.0.0.0 With Hikari Datasource and JPA,所有的查询工作正常。但是现在我需要为所有的数据库查询设置查询超时,我尝试了很多方法:

javax.persistence.query.timeout=1000
spring.transaction.default-timeout=1
spring.jdbc.template.query-timeout=1
spring.jpa.properties.hibernate.c3p0.timeout=1
spring.jpa.properties.javax.persistence.query.timeout=1

配置类:

@Configuration
public class JPAQueryTimeout {

    @Value("${spring.jpa.properties.javax.persistence.query.timeout}")
    private int queryTimeout;   

    @Bean
    public PlatformTransactionManager transactionManager() throws Exception {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setDefaultTimeout(queryTimeout); //Put 1 seconds timeout
        return txManager;
    }
}

查询:

List<Integer> llll = manager.createNativeQuery("select test_sleep(5) from dual")
            .setHint("javax.persistence.query.timeout", 1).getResultList();

数据库任务在返回值之前花费了5秒,但在所有情况下,都没有发生错误。
谁能告诉我如何设置查询超时?

ykejflvf

ykejflvf1#

您可以尝试使用最简单的解决方案,即使用@Transactional内的timeout值;

@Transactional(timeout = 1) // in seconds (so that is 1 second timeout)
public Foo runQuery(String id) {
    String result = repo.findById(id);
    // other logic
}

请注意,使用@Transactional注解的方法必须为public,才能正常工作

相关问题