天天看点

易筋SpringBoot 2.1 | 第十三篇:SpringBoot综合应用多个DataSoure说明工程建立Controller自定义DataSource配置信息启动成功,查看数据库信息查看Actuator启动项信息彩蛋总结参考

写作时间: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。

易筋SpringBoot 2.1 | 第十三篇:SpringBoot综合应用多个DataSoure说明工程建立Controller自定义DataSource配置信息启动成功,查看数据库信息查看Actuator启动项信息彩蛋总结参考

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

易筋SpringBoot 2.1 | 第十三篇:SpringBoot综合应用多个DataSoure说明工程建立Controller自定义DataSource配置信息启动成功,查看数据库信息查看Actuator启动项信息彩蛋总结参考
JSONView 片段 http://localhost:8080/actuator/beans
易筋SpringBoot 2.1 | 第十三篇:SpringBoot综合应用多个DataSoure说明工程建立Controller自定义DataSource配置信息启动成功,查看数据库信息查看Actuator启动项信息彩蛋总结参考

总结

恭喜你,学会了自定义配置多个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