使用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的配置都不是问题。
知道为什么关闭连接吗?
谢谢。
答案 0 :(得分:0)
我找到了解决方案。 将使用此指令创建Bean
@Bean(name = "dataSource", destroyMethod = "")
问题是Spring取消部署,销毁Bean并关闭连接。为了避免这种情况,我必须更改Spring的默认行为。