在Spring Boot中,jdbcTemplate在执行查询后不会自动关闭一次连接吗? 在这种情况下,我正在使用 jdbcTemplate(它连接到 teradata)执行查询,但在执行查询后 session 没有关闭。如何关闭 session ?
这是我的dao文件-
@Component
public class DDLReviewDao {
@Autowired
@Qualifier("devbJdbc")
private JdbcTemplate jdbcTemplate;
public static final Logger logger = LogManager.getLogger(DDLReviewDao.class);
public List<DDLObject> getDDLReviewData(DDLQuery ddlQuery) {
String selectSql = MacroGenerator.generateMacro(ddlQuery);
List<DDLObject> ddlObject = jdbcTemplate.query(selectSql, new DDLMapper());
logger.info(ddlObject);
return ddlObject;
}
}
最佳答案
JdbcTemplate
从 javax.sql.DataSource
实现获取连接 - 传递给它的构造函数 link .
DataSource
可以是basic(为每个请求创建Connection
对象)或pooling(有池的连接,只是“借用”一个用于给定请求的使用)。
因此,连接似乎没有关闭,因为您已将一些池化数据源传递给名为 devbJdbc
的 JdbcTemplate
。如果你真的想关闭每个打开的连接以执行 JdbcTemplate
作业,你可以使用基本的 DataSource
实现:org.springframework.jdbc.datasource.SimpleDriverDataSource
就这样:
@Configuration
class DevbConfig {
@Bean(name = "devbDataSource")
DataSource devbDataSource() {
try {
return new SimpleDriverDataSource(DriverManager.getDriver("jdbc:..."), "jdbc:...", "username", "password");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
@Bean(name = "devbJdbc")
JdbcTemplate devbJdbc(@Qualifier("devbDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
关于java - jdbcTemplate执行完查询后如何在Spring Boot中关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913235/