Weblogic 12c 中的 Web 应用程序 shutdown/start 后无法解析数据源 JNDI
Unable to resolve datasource JNDI after web application shutdown/start in Weblogic 12c
我在 Weblogic 12c 中配置了一个数据源,如下图所示:
而且我在使用此数据源的同一 Weblogic 服务器上还有一个 Web 应用程序:
每当我从头开始启动 Weblogic 时,一切正常。但是,在它启动之后,如果我尝试关闭 Web 应用程序然后再次启动它,我会得到一个 "javax.naming.NameNotFoundException",如下所示:
这是我用来获取数据源的代码:
@Bean
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
DataSource dataSource = dsLookup.getDataSource("jdbc/xdrstoredbds");
return dataSource;
}
我可能遗漏了什么?
替换你的行
DataSource dataSource = dsLookup.getDataSource("jdbc/xdrstoredbds");
和
DataSource dataSource = dsLookup.getDataSource("java:comp/env/jdbc/xdrstoredbds");
然后再尝试运行。
java:comp/env 是 JNDI 树中的节点,您可以在其中找到当前 Java EE 组件的属性
最终导致问题的原因是 Spring 我没有意识到的行为。正如另一个答案 Weblogic datasource disappears from JNDI tree 中提到的,我必须在我的 bean 定义中添加一个 destroyMethod="" 。没有这个似乎 Spring
"tries to determine what the destroy method is. This is apparently
causing the datasource to be closed and the JNDI key to be removed
from the tree. Changing it to "" forces it to not look for a
destroyMethod."
我的方法最终看起来与我提到的答案中的方法相似:
@Bean(destroyMethod = "")
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
return dsLookup.getDataSource("jdbc/xdrstoredbds");
}
我在 Weblogic 12c 中配置了一个数据源,如下图所示:
而且我在使用此数据源的同一 Weblogic 服务器上还有一个 Web 应用程序:
每当我从头开始启动 Weblogic 时,一切正常。但是,在它启动之后,如果我尝试关闭 Web 应用程序然后再次启动它,我会得到一个 "javax.naming.NameNotFoundException",如下所示:
这是我用来获取数据源的代码:
@Bean
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
DataSource dataSource = dsLookup.getDataSource("jdbc/xdrstoredbds");
return dataSource;
}
我可能遗漏了什么?
替换你的行
DataSource dataSource = dsLookup.getDataSource("jdbc/xdrstoredbds");
和
DataSource dataSource = dsLookup.getDataSource("java:comp/env/jdbc/xdrstoredbds");
然后再尝试运行。
java:comp/env 是 JNDI 树中的节点,您可以在其中找到当前 Java EE 组件的属性
最终导致问题的原因是 Spring 我没有意识到的行为。正如另一个答案 Weblogic datasource disappears from JNDI tree 中提到的,我必须在我的 bean 定义中添加一个 destroyMethod="" 。没有这个似乎 Spring
"tries to determine what the destroy method is. This is apparently causing the datasource to be closed and the JNDI key to be removed from the tree. Changing it to "" forces it to not look for a destroyMethod."
我的方法最终看起来与我提到的答案中的方法相似:
@Bean(destroyMethod = "")
public DataSource dataSource() {
final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
dsLookup.setResourceRef(true);
return dsLookup.getDataSource("jdbc/xdrstoredbds");
}