weblogic异常:javax.naming.namenotfoundexception:无法解析“jdbc.payment”解析为“jdbc”;剩余名称“付款”

368yc8dk  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(516)

当我从spring boot应用程序的weblogic中查找jndi数据源时…只有在一次成功部署之后…我的意思是从上的第二次部署开始。如果我重新启动容器,它将只在第一次部署时正常工作。
原因:javax.naming.namenotfoundexception:无法解析“jdbc.payment”。解析为“jdbc”;剩余名称“付款”
具有相同名称并附加到管理服务器的数据源。
我使用docker图像:store/oracle/weblogic:12.2.1.4-dev with 环境变量production\u mode=dev
更新:如果我从服务器上取消连接数据源,然后重新连接它,然后启动war,它会再次成功运行一次ز
更新:切换到weblogic的本地安装,不再停靠,行为仍然发生

vfh0ocws

vfh0ocws1#

这是一个 Spring 问题…与weblogic无关。
在warshutdown中,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);
}

相关问题