首页 > 解决方案 > 在 Tomcat 中使用 JNDI 关闭连接

问题描述

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

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

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

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

java.sql.SQLException:数据源在 org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource 关闭(BasicDataSource.java:2049)

我尝试使用此函数创建 DataSource:

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

知道为什么连接关闭了吗?

谢谢你。

标签: javaspringtomcatjndi

解决方案


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

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

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


推荐阅读