gpt4 book ai didi

java - 在 Tomcat 中使用 JNDI 关闭连接

转载 作者:行者123 更新时间:2023-11-28 22:47:47 24 4
gpt4 key购买 nike

在 Tomcat 9 和 JDK 1.8 下运行,使用 Spring 5,我正在尝试配置 JNDI 连接以获取数据源。

如果我通过 XML 配置 Spring,我会得到我的 DataSource,一切似乎都工作正常。我以这种方式在我的 applicationContext.xml 中配置了数据源:

<jee: jndi-lookup id = "dataSource" jndi-name = "jdbc / yages"
resource-ref = "true" />

当我使用 AbstractAnnotationConfigDispatcherServletInitializer 类初始化 Spring 时,我的 DataSource 已创建,但当我 try catch 连接时,出现以下错误:

java.sql.SQLException: Data source is closed at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource (BasicDataSource.java:2049)

我尝试用这个函数创建数据源:

@Bean (name = "dataSource")
public DataSource dataSource (Environment env) throws NamingException
{
DataSource datasource = null;
try {
JndiDataSourceLookup lookup = new JndiDataSourceLookup ();
datasource = lookup.getDataSource ("jdbc/yages");
datasource.getConnection ();
return datasource;
} catch (SQLException ex) {
ex.printStackTrace ();
}
return datasource;
}

似乎数据源创建正确,但与数据库的连接似乎已关闭。但是,如果我使用 DataSource,通过 XML 配置它,它对我来说效果很好,这就是为什么我认为连接数据库和配置 Tomcat 都不是问题。

知道连接关闭的原因吗?

谢谢。

最佳答案

我找到了解决方案。就是用这条指令来创建Bean

@Bean(name = "dataSource", destroyMethod = "")

问题是 Spring 取消部署,销毁 Bean 并关闭连接。为避免这种情况,我必须更改 Spring 的默认行为。

关于java - 在 Tomcat 中使用 JNDI 关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52095652/

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