Weblogic 异常:javax.naming.NameNotFoundException:无法解析"jdbc.payment"。已解决"jdbc";其余名称'payment'



当我从spring-boot应用程序的weblogic中查找jndi数据源时,我遇到了这个异常仅在一次成功部署之后。。。我的意思是从上的第二次部署开始。如果我重新启动容器,它只适用于第一次部署。

导致原因:javax.naming.NameNotFoundException:无法解析"jdbc.payment"。已解析"jdbc";剩余名称"付款">

具有相同名称并附加到管理服务器的数据源。

我使用docker映像:store/oracle/weblogic:12.2.1.4-dev和环境变量PRODUCTION_MODE=dev

更新:如果我从服务器上取消连接数据源,然后再次尝试,然后开始战争,它会再次成功运行一次">

更新:切换到本地安装的weblogic不再被固定,行为仍然发生

这是春季发行的。。。与weblogic无关。

在war关闭中,Spring从服务器JNDI树中删除数据源,但数据源仍在服务器上运行。将数据源重新创建甚至重新附加到目标服务器的操作,将其再次添加到JNDI树中。

解决此行为的解决方法是防止spring调用数据源bean 的destroy方法

@Primary
@Bean(name = "dataSource",destroyMethod = "")
@Profile("weblogic")
public DataSource dataSourceWeblogic() throws NamingException {
JndiTemplate jndiTemplate = new JndiTemplate();
InitialContext ctx = (InitialContext) jndiTemplate.getContext();
return  (javax.sql.DataSource) ctx.lookup(jndi);
}

最新更新