Spring Boot 2.x多个数据源和jdbctemplate

问题描述 投票:0回答:1

我想在Spring Boot 2.1.3应用程序中使用Multiple Datasources和JdbcTemplates。

我在Stackoverflow和其他网站上尝试了所有解决方案建议。但在我的申请中;当我尝试使用指定的数据源创建Jdbctemplate实例时,它为数据源设置null。

我无法理解问题出在哪里? Hikari Pool在申请准备活动后开始。如何在初始化数据源之后设置jdbcTemplate的数据源?

这是我的代码示例:

@Bean(name = "iybsDS")
@ConfigurationProperties(prefix = "datasource.iybs")
public DataSource iybsDSdataSource() {
    return DataSourceBuilder.create().build();
}

@Bean(name = "diyihDS")
@ConfigurationProperties(prefix = "datasource.diyih")
public DataSource diyihDSdataSource() {
    return DataSourceBuilder.create().build();
}

JdbcTemplate配置:

@Configuration
public class JdbcTemplateConfig {

@Bean(name = "diyihJdbcTemplate")
public JdbcTemplate CreateDiyihJdbcTemplate(@Qualifier("diyihDS") DataSource diyihDS) {
    return new JdbcTemplate(diyihDS);
   }
}

在控制台上尝试打印数据源信息:

@SpringBootApplication
public class WebservicesApplication implements ApplicationRunner {

@Autowired
@Qualifier("diyihDS")
DataSource diyihDS;

public static void main(String[] args) {
    SpringApplication.run(WebservicesApplication.class, args);
}

@Override
public void run(ApplicationArguments args) throws Exception {
    System.out.println(diyihDS);
   }
}

输出是:

2019-03-07 14:27:20.026  INFO 20100 --- [           main] t.g.a.WebservicesApplication             : Started WebservicesApplication in 4.724 seconds (JVM running for 5.594)
HikariDataSource (null)
...
2019-03-07 14:27:20.739  INFO 20100 --- [on(4)-127.0.0.1] com.zaxxer.hikari.HikariDataSource       : DiyihPool - Starting...
2019-03-07 14:27:20.817  INFO 20100 --- [on(4)-127.0.0.1] com.zaxxer.hikari.HikariDataSource       : DiyihPool - Start completed.

当我尝试在我的应用程序中向Web服务发送请求时,我收到错误,因为JdbcTemplate的数据源错误或为null。

我认为我的错误:我只尝试了一个JdbcTemplate实例。我创建了所有需要的jdbcTemplates并设置了其中一个主要的jdbcTemplates。然后每个服务都有自己的JdbcTemplate和Datasource。

spring-boot hikaricp
1个回答
0
投票

尝试添加DataSourceProperties Bean并使用它:

@Bean
@Primary
@ConfigurationProperties("datasource.diyih") 
public DataSourceProperties diyihDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean(name="diyihDS")
@Primary
@ConfigurationProperties("spring.datasource.diyih")
public DataSource diyihDataSource() {
    return diyihDataSourceProperties().initializeDataSourceBuilder().build();
}
© www.soinside.com 2019 - 2024. All rights reserved.