首页 文章

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

提问于
浏览 334 次
2

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

我们正在使用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"/>

观察:

  • MySQL已启动,它显示Connections:6 .

  • 使用我的一个Web应用程序启动Tomcat,在MySQL中,我现在看到Connections:16 .

  • 已停止Tomcat并保留16个连接 .

  • 我停止/启动Tomcat并且Connections继续攀爬(我猜10,因为initialSize默认为10?)

问题:

  • 我正在阅读文档,使用Spring JdbcTemplate处理连接(获取并将它们释放到池中)但是在关闭时会发生什么 - 我的连接是否应该在关闭时全部关闭?

  • 我是否应该做其他事情以确保在应用程序关闭时关闭所有数据库连接?

谢谢 .

1 回答

  • 1

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

    context.registerShutdownHook();
    

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

相关问题