现有一耗时操作,为避免请求长时间未返回而抛出异常设置了超时时间
HikariConfig config = new HikariConfig();
config.setDriverClassName("com.mysql.jdbc.Driver");
config.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/mysql");
config.setUsername("root");
config.setPassword("123456");
config.setConnectionTimeout(1000); // 设置超时时间1秒
为了明确setConnectionTimeout()的作用,我导入了30万条数据进行查询并将超时时间设置为1秒,启动后查询出结果并耗时2秒
【预期结果】由于设置了timeout为1秒,实际耗时2秒,所以会抛出超时异常
【实际结果】没有抛出超时异常,耗时2秒查询出了结果
请教前辈们我是不是对JDBC中的timeout有误解呢?这里的timeout不是指查询超时时间?
아니요. 연결 풀에서 connection을 반환하는 시간 초과입니다.
connectionTimeout
이 속성은 클라이언트(즉, 사용자)가 풀에서 연결을 기다리는 최대 밀리초 수를 제어합니다. 연결이 가능해지면 SQLException이 발생합니다. 허용되는 최저 연결 시간 초과는 250ms입니다. 기본값: 30000(30초)
위는 공식 설명입니다.
SQL 실행 시간 제한
을 사용할 수 있습니다.JDBC
Statement.setQueryTimeout을 직접 사용할 수 있습니다.Spring
@Transactional(timeout=10)