应用程序关闭时Spring jdbctemplate关闭连接?

时间:2015-04-24 05:40:57

标签: java spring jdbc jdbctemplate

我看到应用程序关闭后数据库连接没有关闭。

我们正在使用Spring org.springframework.jdbc.core.support.JdbcTemplate,并已配置连接池。 Tomcat的示例上下文xml是:

<Resource name="jdbc/fooResource"
        auth="Container"
        testOnBorrow="true"
        validationQuery="select 1 from DUAL"
        type="javax.sql.DataSource"
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
        username="user"
        password="password"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/myschema"
        maxActive="100"
        maxIdle="10"/>

我的Spring bean定义有这个片段:

<jee:jndi-lookup id = "dataSource"
     jndi-name = "jdbc/fooResource"
      expected-type = "javax.sql.DataSource"/>

观察:

  1. MySQL已启动,它显示Connections:6。
  2. 使用我的一个Web应用程序启动Tomcat,在MySQL中,我现在看到Connections:16。
  3. 停止了Tomcat并保留了16个连接。
  4. 我停止/启动Tomcat并且Connections继续攀爬(我猜10,因为initialSize默认为10?)
  5. 问题:

    1. 我正在阅读文档,使用Spring JdbcTemplate处理连接(获取并将它们释放到池中)但是在关闭时会发生什么 - 我的连接应该在关闭时全部关闭?
    2. 我是否应该做任何其他事情以确保在应用程序关闭时关闭所有数据库连接?
    3. 感谢。

1 个答案:

答案 0 :(得分:1)

如果手动创建应用程序上下文,则需要在应用程序上下文中注册关闭挂钩。当您启动应用程序时,获取对上下文的引用并添加此行

context.registerShutdownHook();

如果不这样做,则不会触发销毁事件。