Skip to content

动态数据源

zhōuhào edited this page Dec 9, 2017 · 2 revisions

动态数据源

hsweb提供了动态数据源功能,hsweb-datasource-api实现简单的多数据源,不支持多数据源事务。使用时。直接向spring容器声明多个DataSource即可.你还可以使用jta(atomikos)管理动态数据源事务,可实现数据源热修改,事务中切换数据源.

引入动态数据源jta实现

<dependency>
    <groupId>org.hswebframework.web</groupId>      
    <artifactId>hsweb-datasource-jta</artifactId>
    <version>${hsweb.framework.version}</version>
</dependency>

在配置文件中添加动态数据源

  1. 配置默认数据源 默认数据源配置,使用spring的jta配置即可:
spring:
  jta:
    status: true
    atomikos:
      datasource:
        xa-data-source-class-name: com.alibaba.druid.pool.xa.DruidXADataSource
        xa-properties:
          url : jdbc:h2:mem:core;DB_CLOSE_ON_EXIT=FALSE
          username : sa
          password :
        max-pool-size: 20
        borrow-connection-timeout: 1000
      connectionfactory:
        max-pool-size: 20
        local-transaction-mode: true
  1. 动态数据源配置 动态数据源配置,默认提供一个 MemoryJtaDataSourceRepository,在application.yml 中进行配置即可:
hsweb:
  dynamic:
    datasource:
        test_ds:  # 数据源ID
            xa-data-source-class-name: com.alibaba.druid.pool.xa.DruidXADataSource
            xa-properties: # 数据源的配置属性
              url: jdbc:h2:mem:test;DB_CLOSE_ON_EXIT=FALSE
              username: sa
              password:
            max-pool-size: 20
            borrow-connection-timeout: 1000
        test_ds2: # 数据源ID
          xa-data-source-class-name: com.alibaba.druid.pool.xa.DruidXADataSource
          xa-properties: # 数据源的配置属性
            url: jdbc:mysql://localhost:3306/hsweb?pinGlobalTxToPhysicalConnection=true&useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false
#            url: jdbc:h2:mem:test2;DB_CLOSE_ON_EXIT=FALSE
            username: root
            password: 123456
          max-pool-size: 20
          borrow-connection-timeout: 1000
          init-timeout: 20

自定义动态数据源配置

如果需要将数据源配置放到数据库中或其他地方,实现 JtaDataSourceRepository 接口并注入到spring容器即可.

注解方式切换动态数据源

@UseDataSource("test_ds")
String insert(MyEntity);
 
@UseDataSource("test_ds2")
MyEntity selectByPk(String id);
 
@UseDefaultDataSource()
MyEntity selectByPk(String id);

编程方式切换动态数据源

  //切换到 id为test_ds的数据源
  DataSourceHolder.switcher().use("test_ds");
  // ....
  //切换到 id为test_ds2的数据源
  DataSourceHolder.switcher().use("test_ds2");
  // ....
  // 切换到上一次使用的数据源 (test_ds)
   DataSourceHolder.switcher().useLast();
  // ...
  // 切换到默认的数据源
  DataSourceHolder.switcher().useDefault();
  //重置设置
   DataSourceHolder.switcher().reset();

hsweb 3.0

 3.0,全新的架构
 模块化,更细,更轻
 吸取经验,优化功能
  1. 增删改查
  2. 权限控制
  3. 访问日志
  4. 动态数据源
  5. 常用并发工具
  6. 消息封装
  7. 其他工具
Clone this wiki locally