java - jdbcTemplate执行完查询后如何在Spring Boot中关闭连接?

标签 java spring jdbc spring-boot jdbctemplate

在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;
    }

}

最佳答案

JdbcTemplatejavax.sql.DataSource 实现获取连接 - 传递给它的构造函数 link .

DataSource 可以是basic(为每个请求创建Connection 对象)或pooling(有池的连接,只是“借用”一个用于给定请求的使用)。

因此,连接似乎没有关闭,因为您已将一些池化数据源传递给名为 devbJdbcJdbcTemplate。如果你真的想关闭每个打开的连接以执行 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/

相关文章:

java - 如何向 Java 应用程序添加参数

java - 我可以在不使用 ehcache 的情况下使 spring 缓存过期吗

mysql - 我在哪里可以下载 mysql jdbc jar?

sql - 检索 CLOB 字段期间出现 DB2 查询错误

java - JDBC 第一次访问异常

java - 将字符串值转换为类型

Java - 为什么 Thread#join(millis) 无效?

java - Java 对象数组可以将元素初始化为非空值吗?

java - 模拟 : How to test my Dao with mocking?

java - Thyemleaf 嵌套迭代触发 org.thymeleaf.exceptions.TemplateInputException