我的任务是增强部署在weblogic 12c中的现有spring boot rest api应用程序。 Spring Boot应用程序使用在weblogic中配置的现有数据源。 我需要将一个数据源添加到一个完全不同的Oracle数据库实例中。
我不了解当前配置的工作方式: spring boot application.properties 文件条目:
spring.datasource.jndi-name = AbcDS
weblogic中数据源的JNDI名称为: AbcDS
在DAO中-此处的dao已成功注入:
@Repository
public class EmpDao {
@Autowired
DataSource dataSource;
我的问题是我在weblogic中有一个新的数据源: XyzDS 如何将其注入到其他dao中,并确保已注入此数据源而不是 AbcDS ?
EDIT1:
基于link的类似问题-我在下面粘贴了已经尝试过的代码,但仍然收到Null Pointer异常:
在下面的代码中定义了2个bean。已经定义了两个带有'Qualifier'注释和'ConfigurationProperties'的数据源以从属性文件中读取JNDI名称。
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@Qualifier("ds1")
@ConfigurationProperties(prefix="spring.datasource1")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Qualifier("ds2")
@ConfigurationProperties(prefix="spring.datasource2")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
在 application.properties中:
spring.datasource1.jndi-name=AbcDS
spring.datasource2.jndi-name=XyzDS
然后在我的DAO中-正在尝试使用此数据源:
@Autowired
@Qualifier("ds1")
DataSource dataSource;
但是由于在此行代码中出现了NullPointer异常,因此未注入数据源:
conn = dataSource.getConnection();
正在通过将spring boot应用程序部署到weblogic 12c来尝试所有这些操作
EDIT2:
基于DaveyDaveDave的输入,我尝试通过删除代码中已定义数据源bean的@Qualifier注释。
这里是该代码的摘录-这也给了我NPE。
我相信,我搜索的几乎所有示例都使用非JNDI数据源和tomcat,而我的问题是weblogic上存在多个JNDI数据源,并试图在weblogic 12c上部署的spring boot应用程序中使用它们。
以下是代码:(请注意,@ Bean已使用
@Configuration
public class DataSourceConfig {
@Bean(name="ds1")
@Primary
@ConfigurationProperties(prefix="spring.datasource1")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean("name=ds2")
@ConfigurationProperties(prefix="spring.datasource2")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
这是我再次尝试在我的DAO类中注入和使用数据源的代码:
@Autowired
@Qualifier("ds1")
DataSource dataSource;
@Override
public List <String> create(Employee empRequest) {
Connection conn = null;
conn = dataSource.getConnection();