gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:04:56 25 4
gpt4 key购买 nike

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

我们使用的是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 已启动,显示连接数:6。
  2. 使用我的一个网络应用程序启动 Tomcat,在 MySQL 中,我现在看到连接数:16。
  3. 已停止 Tomcat,但仍保留 16 个连接。
  4. 我停止/启动 Tomcat,连接一直在攀升(我猜是 10,因为 initialSize 默认是 10?)

问题:

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

谢谢。

最佳答案

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

context.registerShutdownHook();

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

关于java - Spring jdbctemplate 在应用程序关闭时关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29839561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com