我正在使用Weblogic 12c,并且已将数据源配置如下:
请注意,它们都已部署在目标“ AdminServer”上。另外,“名称”字段和“ JNDI名称”字段相同。例如,假设一个数据源的名称为“ MYDS”。
现在,当我尝试像这样通过Spring Data JPA获取该数据源时:
@Bean
@Primary
public DataSource businessDataSource() throws IllegalArgumentException, NamingException {
JndiObjectFactoryBean dataSource = new JndiObjectFactoryBean();
dataSource.setResourceRef(true);
dataSource.setJndiName("MYDS");
dataSource.afterPropertiesSet();
return (DataSource) dataSource.getObject();
}
尝试将war文件部署到weblogic时出现以下错误:
通过工厂方法实例化Bean失败;嵌套异常为 org.springframework.beans.BeanInstantiationException:失败 实例化[javax.sql.DataSource]:工厂方法 'businessDataSource'引发异常;嵌套异常为 javax.naming.NameNotFoundException:无法解析“ MYDS”。解决 '';剩余的名称“ MYDS”
我也看到此错误:
DEBUG o.s.jndi.JndiObjectFactoryBean-转换后的JNDI名称 找不到[java:comp / env / MYDS]-尝试使用原始名称[MYDS]。 javax.naming.NameNotFoundException:尝试查找时 comp / env / MYDS / app / myapp / webclient / 404708050。剩余的名字 'comp / env / MYDS'
答案 0 :(得分:1)
只需查看setResourceRef的源代码,并指出:
public void setResourceRef(boolean resourceRef)
设置查找是否在Java EE容器中进行,
即如果JNDI名称尚未包含前缀“ java:comp / env /”,则需要添加它。 默认值为“ false”。
注意:仅在未提供其他方案(例如“ java:”)的情况下才会应用。
如果将其设置为true,是否尝试过将Java:comp / env /添加到JNDI名称?