【发布时间】:2017-08-08 04:18:57
【问题描述】:
我正在开发 Spring Boot 应用程序,我使用 Spring Data、HikariCP 和 JDBC,但我遇到了问题。
在一种方法中,我使用 Spring Data 存储库从数据库中获取特定的 User。在我从数据库中获取User 之后,我使用JdbcTemplate.query 从数据库中获取一些其他信息,其中username 高于User,但应用程序冻结并在一段时间后抛出
java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30006ms.
当我调试代码时,我看到jdbctemplate 正在使用 hikariCP 作为datasource。
这是我正在使用的代码:
public User getUser() {
User user = userRepository.findByUsernameAndEnabledTrue("username");
List<String> roles= getUserRoles(user.getUsername())
return user;
}
private List<String> getUserRoles(String username) {
List<String> roles = this.jdbcTemplate.query("SELECT ga.authority FROM group_authorities ga INNER JOIN group_members gm ON gm.group_id = ga.group_id INNER JOIN users u ON gm.username=u.username WHERE u.username=?;",
new Object[]{username},new ResultSetExtractor<List<String>>() {
@Override
public List<String> extractData(ResultSet resultSet) throws SQLException, DataAccessException {
List<String> roles = new ArrayList<>();
while (resultSet.next()) {
roles.add(resultSet.getString("authority"));
}
return roles;
}
});
return roles;
}
我研究了如何将它们一起使用并共享相同的事务或类似的东西,但不幸的是无法修复它。
【问题讨论】:
标签: spring hibernate jdbc spring-data spring-jdbc