写作时间:2019-08-06
Spring Boot: 2.1 ,JDK: 1.8, IDE: IntelliJ IDEA
说明
服务器都要跟数据库打交道,这里通过Actuator去检测已经加载的Beans,以及对数据库创建表,初始化数据,已经程序对数据的读取。
工程建立
参照教程【SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程】新建一个Spring Boot项目,名字叫demojdbccompose, 在目录
src/main/java/resources
下找到配置文件
application.properties
,重命名为
application.yml
。
在Dependency中选择
Developer Tools > Lombok
Web > Spring Web Starter
SQL > H2 DataBase / JDBC API
Ops > Spring Boot Actuator。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL5MTMwMDMwgDMzADOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
Controller自定义DataSource
com.zgpeace.demomultidatasource.DemomultidatasourceApplication
package com.zgpeace.demomultidatasource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.annotation.Resource;
import javax.sql.DataSource;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
JdbcTemplateAutoConfiguration.class})
@Slf4j
public class DemomultidatasourceApplication {
public static void main(String[] args) {
SpringApplication.run(DemomultidatasourceApplication.class, args);
}
@Bean
@ConfigurationProperties("foo.datasource")
public DataSourceProperties fooDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource fooDataSource() {
DataSourceProperties dataSourceProperties = fooDataSourceProperties();
log.info("foo datasource: {}", dataSourceProperties.getUrl());
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@Resource
public PlatformTransactionManager fooTxManager(DataSource fooDataSource) {
return new DataSourceTransactionManager(fooDataSource);
}
@Bean
@ConfigurationProperties("bar.datasource")
public DataSourceProperties barDataSourceProperties() {
return new DataSourceProperties();
}
@Bean
public DataSource barDataSource() {
DataSourceProperties dataSourceProperties = barDataSourceProperties();
log.info("bar datasource: {}", dataSourceProperties.getUrl());
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean
@Resource
public PlatformTransactionManager barTxManager(DataSource barDataSource) {
return new DataSourceTransactionManager(barDataSource);
}
配置信息
properties.yml
management:
endpoints:
web:
exposure:
include: '*'
spring:
output:
ansi:
enabled: always
foo:
datasource:
url: 'jdbc:h2:mem:foo'
username: 'sa'
password:
bar:
datasource:
url: 'jdbc:h2:mem:bar'
username: 'sa'
password:
注意:第一第二项为Actuator的配置信息
启动成功,查看数据库信息
c.z.d.DemomultidatasourceApplication : foo datasource: jdbc:h2:mem:foo
c.z.d.DemomultidatasourceApplication : bar datasource: jdbc:h2:mem:bar
查看Actuator启动项信息
查看health信息
% curl http://localhost:8080/actuator/health
{
status: "UP"
}%
查看启动beans信息, 这里只列出了数据源相关的beans,其它省略…
{"contexts":
{"application":
{"beans":
{
"fooDataSourceProperties": {
"aliases": [ ],
"scope": "singleton",
"type": "org.springframework.boot.autoconfigure.jdbc.DataSourceProperties",
"resource": "geektime.spring.data.multidatasourcedemo.MultiDataSourceDemoApplication",
"dependencies": [ ]
},
"fooTxManager": {
"aliases": [ ],
"scope": "singleton",
"type": "org.springframework.jdbc.datasource.DataSourceTransactionManager",
"resource": "geektime.spring.data.multidatasourcedemo.MultiDataSourceDemoApplication",
"dependencies": [
"fooDataSource"
]
},
...
更多Actuator的信息请参考官网:Part V. Spring Boot Actuator: Production-ready features
彩蛋
Chrome 格式化JSON插件
https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=zh-cn
JSONView 片段 http://localhost:8080/actuator/beans
总结
恭喜你,学会了自定义配置多个DataSource。
代码下载:
https://github.com/zgpeace/Spring-Boot2.1/tree/master/db/demomultidatasource
参考
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
https://github.com/alibaba/druid
https://github.com/geektime-geekbang/geektime-spring-family/tree/master/Chapter%202/multi-datasource-demo