Weblogic异常:javax.naming.NameNotFoundException:无法解析“ jdbc.payment”已解决的“ jdbc”;剩余名称“付款”

问题描述

当我从Spring Boot应用程序中从weblogic查找jndi数据源时出现此异常... 仅在一次成功部署之后 ...我的意思是从第二次部署开始。如果重新启动容器,它将仅适用于第一次部署。

原因:javax.naming.NameNotFoundException:无法解析“ jdbc.payment”。已解决的“ jdbc”;剩余名称“付款”

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

我使用具有环境变量 PRODUCTION_MODE = dev

的docker image:store / oracle / weblogic:12.2.1.4-dev

更新:如果我从服务器上断开数据源的连接,然后再次重新格式化然后开始战争,它将再次成功运行一次

更新:切换到本地安装weblogic不再进行泊坞窗操作,并且该行为仍然发生

解决方法

这是一个春季问题……与weblogic无关。

在战争关闭中,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);
}