spring-boot - Spring Boot 2.x 多数据源和 jdbctemplate
问题描述
我想在我的 Spring Boot 2.1.3 应用程序中使用多个数据源和 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();
}
Jdbc模板配置:
@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 的数据源错误或为空。
我弄错了: 我只尝试了一个 JdbcTemplate 实例。我创建了所有需要的 jdbcTemplates 并设置了一个 Primary。然后每个服务都有自己的 JdbcTemplate 和 Datasource。
解决方案
Try adding DataSourceProperties
Bean and use it:
@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();
}
推荐阅读
- java - Java 有异常的麻烦。一个例外不允许我更正我的输入,而另一个例外
- firemonkey - 当我尝试放置圆角时,TRectangle 上的黑色边框
- reactjs - 将formik与material-table集成的好方法是什么?
- docker - 如何使用官方 Tensorflow docker 容器在主机目录中保存和编辑 Jupyter 笔记本?
- typescript - 将 ngif 应用到挂载的组件后不渲染子组件
- c++ - 字符串初始化问题解释
- php - 在 WordPress 中使用 register_theme_directory 进行主题迭代
- swift - CollectionView 中的 CollectionView:使用 didSelectItemAt 执行Segue
- c - 为什么 C 语言 4 个字节上出现一个 char 字符
- c - 管道系统()的标准输出到其他系统的标准输入()