在Tomcat中使用JNDI关闭连接

时间:2018-08-30 11:14:05

标签: java spring tomcat jndi

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

如果我通过XML配置Spring,我将获得DataSource,并且一切似乎都可以正常工作。我通过以下方式在applicationContext.xml中配置了数据源:

<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)

我尝试使用此功能创建数据源:

@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的配置都不是问题。

知道为什么关闭连接吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 将使用此指令创建Bean

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

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