Spring Boot和Weblogic Jndi数据源

时间:2019-07-01 03:29:47

标签: java spring spring-boot weblogic

我的任务是增强部署在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();

0 个答案:

没有答案