数据源在 WebLogic 12.2 上无故丢失
datasource get lost on WebLogic 12.2 without any reason
我们想在 WebLogic 12.2.1.3 上部署一个基于 Spring 的应用程序。它使用 JDBC 数据源和 jdbc/payeshws 数据源。
当我部署应用程序(使用控制台或自动部署文件夹)并启动应用程序时,一切正常,但如果我停止然后在 WebLogic 控制台中启动应用程序,它会引发异常,其根本原因为:
Caused by: javax.naming.NameNotFoundException: Unable to resolve 'jdbc.payeshws'. Resolved 'jdbc'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1292)
at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:354)
at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:227)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
at weblogic.jndi.internal.ServerNamingNode.lookup(ServerNamingNode.java:527)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:228)
at weblogic.jndi.internal.ServerNamingNode.lookup(ServerNamingNode.java:527)
at weblogic.jndi.internal.RootNamingNode.lookup(RootNamingNode.java:84)
at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:307)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:435)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at org.springframework.jndi.JndiTemplate.lambda$lookup[=10=](JndiTemplate.java:156)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:91)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:156)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:105)
at org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup.getDataSource(JndiDataSourceLookup.java:45)
如果我启动,再次停止 WebLogic,它再次正常。
我什至尝试重新启动数据源(通过在 AdminServer 上启用和禁用它),但问题仍然存在。
我们的应用程序在 WebLogic 12.1 + Java 7 上运行没有任何问题。
P.S。我不确定它是否有帮助,但该应用程序使用 MyBatis 进行数据访问。
我找到了答案here。我相信这是 Spring 5.1.x 的错误,因为使用 Spring 4.2.x.
没有这样的问题
我应该将 destroyMethod=""
添加到数据源定义 bean,因为
@Bean(destroyMethod = "")
public DataSource jndiDataSource() {
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
return lookup.getDataSource(datasourceJndi);
}
我们想在 WebLogic 12.2.1.3 上部署一个基于 Spring 的应用程序。它使用 JDBC 数据源和 jdbc/payeshws 数据源。
当我部署应用程序(使用控制台或自动部署文件夹)并启动应用程序时,一切正常,但如果我停止然后在 WebLogic 控制台中启动应用程序,它会引发异常,其根本原因为:
Caused by: javax.naming.NameNotFoundException: Unable to resolve 'jdbc.payeshws'. Resolved 'jdbc'
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1292)
at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:354)
at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:227)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:214)
at weblogic.jndi.internal.ServerNamingNode.lookup(ServerNamingNode.java:527)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:228)
at weblogic.jndi.internal.ServerNamingNode.lookup(ServerNamingNode.java:527)
at weblogic.jndi.internal.RootNamingNode.lookup(RootNamingNode.java:84)
at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:307)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:435)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at org.springframework.jndi.JndiTemplate.lambda$lookup[=10=](JndiTemplate.java:156)
at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:91)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:156)
at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:105)
at org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup.getDataSource(JndiDataSourceLookup.java:45)
如果我启动,再次停止 WebLogic,它再次正常。
我什至尝试重新启动数据源(通过在 AdminServer 上启用和禁用它),但问题仍然存在。
我们的应用程序在 WebLogic 12.1 + Java 7 上运行没有任何问题。
P.S。我不确定它是否有帮助,但该应用程序使用 MyBatis 进行数据访问。
我找到了答案here。我相信这是 Spring 5.1.x 的错误,因为使用 Spring 4.2.x.
没有这样的问题我应该将 destroyMethod=""
添加到数据源定义 bean,因为
@Bean(destroyMethod = "")
public DataSource jndiDataSource() {
JndiDataSourceLookup lookup = new JndiDataSourceLookup();
return lookup.getDataSource(datasourceJndi);
}