在Weblogic 12c中关闭/启动Web应用程序后,无法解析数据源JNDI

时间:2016-06-16 03:58:38

标签: java weblogic datasource

我在Weblogic 12c中配置了一个DataSource,如下图所示:

Datasource

我在使用此数据源的同一Weblogic服务器上也有一个Web应用程序:

Web Application

每当我从头开始创建Weblogic时,一切正常。但是,在它启动之后,如果我尝试关闭webapplication然后再次启动它,我有一个“javax.naming.NameNotFoundException”,如下所示:

enter image description here

这是我用来获取数据源的代码:

@Bean
public DataSource dataSource() {
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
    dsLookup.setResourceRef(true);
    DataSource dataSource = dsLookup.getDataSource("jdbc/xdrstoredbds");
    return dataSource;
} 

我可能缺少什么?

2 个答案:

答案 0 :(得分:2)

结束问题的原因是我不知道的Spring行为。正如在其他答案Weblogic datasource disappears from JNDI tree中所提到的,我必须在我的bean定义中添加destroyMethod =“”。没有它,似乎是春天

  

“试图确定破坏方法是什么。这显然是   导致数据源关闭并删除JNDI密钥   从树上。将其更改为“”会强制它不寻找   了destroyMethod“。

我的方法最终看起来与我提到的答案中的那个相似:

@Bean(destroyMethod = "")
public DataSource dataSource() {
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
    dsLookup.setResourceRef(true);
    return dsLookup.getDataSource("jdbc/xdrstoredbds");
} 

答案 1 :(得分:0)

替换你的行

DataSource dataSource = dsLookup.getDataSource("jdbc/xdrstoredbds");

DataSource dataSource = dsLookup.getDataSource("java:comp/env/jdbc/xdrstoredbds"); 

然后尝试再次进入。
java:comp / env是JNDI树中的节点,您可以在其中找到当前Java EE组件的属性