在Tomcat中使用JNDI关闭连接



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

如果我通过XML配置Spring,我会得到我的数据源,一切似乎都很好。我在应用程序上下文.xml中配置了数据源,如下所示:

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

当我使用 AbstractAnnotationConfigDispatcherServletInitializer 类初始化 Spring 时,我的 DataSource 被创建,但是当我尝试捕获连接时,它给了我以下错误:

java.sql.SQLException:数据源已关闭 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;
}

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

知道为什么连接关闭吗?

谢谢。

我找到了解决方案。 就是用这个指令创建豆子

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

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

最新更新