• SpringBoot数据源相关配置


    数据源配置

    单数据源

    配置步骤

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

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

    配置属性

    # 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等。

    @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.

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

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

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

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

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

    完全不同的库,分开写,不使用自动切。分库分表或者读写分离的情况,用中间件来做,无论是客户端的,还是代理的。

    版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    Async方法死锁的问题 Don't Block on Async Code(转)
    微信小程序列表项滑动显示删除按钮
    使用CodeDom动态生成类型
    react native中state和ref的使用
    react native中props的使用
    react native组件的生命周期
    react-native debug js remotely跨域问题
    react native组件的创建
    react native基础与入门
    ionic 开发实例
  • 原文地址:https://www.cnblogs.com/dtyy/p/15575362.html
Copyright © 2020-2023  润新知