SpringBoot数据源相关配置

2021年11月22日 阅读数:3
这篇文章主要向大家介绍SpringBoot数据源相关配置,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

数据源配置

单数据源

配置步骤java

  1. 引入依赖:H2数据库驱动、JDBC依赖、acturator(运维)、web模块(用于测试)、lambok(使用@Slf4j打印日志)。
  2. 直接配置所需的Bean,注入容器。
    1. 数据源:DataSource
    2. 事务:例PlatformTransactionManager(DataSourceTransactionManager)
    3. 操做:例JdbcTemplate

springboot所作的自动配置,包括上面三个,分别是DataSourceAutoConfiguration、DataSourceTransactionManagerAutoConfiguration、JdbcTemplateAutoConfiguration。mysql

配置属性web

# Spring boot actuator端点暴露
management.endpoints.web.exposure.include=*
# 控制台彩色输出,不要带到生产上去!!
spring.output.ansi.enabled=ALWAYS

# 通用属性
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver(可选)

# 初始化内嵌数据库
spring.datasource.initialization-mode=embedded|always|never
spring.datasource.schema与spring.datasource.data肯定初始化SQL⽂文件
spring.datasource.platform=hsqldb | h2 | oracle | mysql | postgresql(与前者对应)

多数据源

配置多个数据源有两种方式,第一种是继续使用springboot自动配置,经过@Primary设置主数据源;第二种是剔除springboot自动配置,分别配置多个数据源、事务管理器、JDBCTmeplate等。spring

@Bean
@Primary
@ConfigurationProperties("app.datasource.member")
public DataSourceProperties memberDataSourceProperties() {
    return new DataSourceProperties();
}
@Bean
@Primary
@ConfigurationProperties("app.datasource.member.configuration")
public DataSource memberDataSource() {
    return memberDataSourceProperties().initializeDataSourceBuilder()
            .type(HikariDataSource.class).build();
}

扩展

  1. Spring本身会计算依赖关系,把依赖最底层的Bean先建立出来。

All @Configuration classes are subclassed at startup-time with CGLIB. In the subclass, the child method checks the container first for any cached (scoped) beans before it calls the parent method and creates a new instance.sql

全部@Configuration类在启动时会使用CGLIB子类化。子类方法在调用父类方法或建立新实例以前,首先会检查容器中是否有缓存的bean。shell

  1. 排除了SpringBoot的数据源自动配置,SpringBoot不会为你初始化Schema和Data。参考DataSourceInitializerInvoker设置初始化数据。数据库

  2. SpringBoot自动配置多数都是针对只有一个DataSource的状况,要么给主要的DataSource Bean增长@Primary注解,要么就把几个自动配置类排除掉。缓存

  3. 自动配置会针对上下文中惟一的DataSource或者标记了@Primary的那个DataSource作相关配置springboot

其余,Spring中,AbstractRoutingDataSource,能够自动切换多个数据源。经过编码来指定DataSource。Alibaba Druid里也有一个HA的DataSource,用ThreadLocal变量来控制返回哪一个DataSource。oracle

彻底不一样的库,分开写,不使用自动切。分库分表或者读写分离的状况,用中间件来作,不管是客户端的,仍是代理的。