【发布时间】:2018-08-30 11:14:05
【问题描述】:
在 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)
我尝试用这个函数创建数据源:
@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 的配置都不是问题。
知道连接关闭的原因吗?
谢谢。
【问题讨论】:
-
为什么要在数据源上调用getConnection()?也看看stackoverflow.com/questions/25149969/…
-
我在您提供的任何地方都看不到这与打开连接有任何关系,该错误专门与数据源关闭有关。这可能表明它一开始就没有成功打开过。配置中的那个jndi名字看起来很奇怪,里面真的有空格吗?
-
我打电话给getConnection,只是为了测试。如果连接关闭,Java 会抛出异常。