我有应用程序从WebLogic通过jndi名称获取数据源。
JndiObjectFactoryBean jndiFactory = new JndiObjectFactoryBean();
jndiFactory.setJndiName(currentDSSettings.getJndi());
jndiFactory.setResourceRef(true);
jndiFactory.setProxyInterface(DataSource.class);
jndiFactory.setLookupOnStartup(false);
jndiFactory.afterPropertiesSet();
datasource = (DataSource) jndiFactory.getObject();
我在application.yml
中配置了jndi数据源名称:
spring:
profiles.active: development
---
spring:
profiles: production
datasources:
- dbName : myDataSource
driverClass:
url:
jndi: RCDB-SMS-JNDI
db:
server:
user:
password:
我在WebLogic服务器上配置了它,指定了特定的目标。我测试了这个数据源,WebLogic说测试成功了。但是当我尝试部署应用程序时,我收到以下错误:
javax.naming.NameNotFoundException: Unable to resolve 'RCDB-SMS-JNDI'. Resolved ''; remaining name 'RCDB-SMS-JNDI'
我需要确定WebLogic的数据源配置是否存在问题,或者在我的java代码中获取数据源时出现问题。我能否在不部署应用程序的情况下测试获取数据源?
答案 0 :(得分:0)
似乎你应该在JndiName前面添加一个路径。尝试根据路径定义将代码替换为以下代码:
JndiObjectFactoryBean jndiFactory = new JndiObjectFactoryBean();
jndiFactory.setJndiName("java:comp/env/" + env.getProperty("sta.datasource.name", "jdbc/mySpace"));
jndiFactory.setResourceRef(true);
jndiFactory.setProxyInterface(DataSource.class);
jndiFactory.setLookupOnStartup(false);
try {
jndiFactory.afterPropertiesSet();
} catch (IllegalArgumentException | NamingException e) {
throw new SQLException("Datasource not found", e);
}
datasource = (DataSource) jndiFactory.getObject();
可以配置 或 application.yml
server:
contextPath: jdbc/mySpace