upr*_*er5 2 java spring jdbc jdbctemplate spring-boot
在 Spring Boot 中,jdbcTemplate 在执行查询后不会自动关闭一次连接吗?在这种情况下,我正在使用 jdbcTemplate(它连接到 teradata 的位置)执行查询,但在执行查询后会话并未关闭。如何关闭会话?
这是我的 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;
}
}
Run Code Online (Sandbox Code Playgroud)
JdbcTemplate gets its connections from javax.sql.DataSource implementation - which is passed to its constructor link.
The DataSources can be basic (creates Connection object for each request) or pooling (has pool of connections and just 'borrows' one for given request's use).
So, it appears that the connection is not closing because you have passed some pooling datasource to JdbcTemplate named devbJdbc. If you realy want to close every connection opened to do the JdbcTemplate job, you can use a basic DataSource implementation: org.springframework.jdbc.datasource.SimpleDriverDataSource just like that:
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21944 次 |
| 最近记录: |