zhouhao hace 8 años
padre
commit
0d9924d92d
Se han modificado 2 ficheros con 83 adiciones y 0 borrados
  1. 34 0
      hsweb-datasource/README.md
  2. 49 0
      hsweb-datasource/hsweb-datasource-jta/README.md

+ 34 - 0
hsweb-datasource/README.md

@@ -0,0 +1,34 @@
+# 动态数据源模块
+提供动态数据源支持功能,支持注解方式,编程方式动态切换数据源,支持事务中切换数据源,支持跨数据库事务
+
+目前提供JTA实现,请看:[hsweb-datasource-jta](hsweb-datasource-jta)
+
+# example
+
+编程方式:
+```java
+  //切换到 id为mysql_read_01的数据源
+  DataSourceHolder.switcher().use("mysql_read_01");
+  // ....
+  //切换到 id为mysql_write_01的数据源
+  DataSourceHolder.switcher().use("mysql_write_01");
+  // ....
+  // 切换到上一次使用的数据源 (mysql_read_01)
+   DataSourceHolder.switcher().useLast();
+  // ...
+  // 切换到默认的数据源
+  DataSourceHolder.switcher().useDefault();
+```
+
+注解方式:
+```java
+@UseDataSource("mysql_write_01")
+String insert(MyEntity);
+ 
+@UseDataSource("mysql_read_01")
+MyEntity selectByPk(String id);
+ 
+@UseDefaultDataSource()
+MyEntity selectByPk(String id);
+```
+

+ 49 - 0
hsweb-datasource/hsweb-datasource-jta/README.md

@@ -0,0 +1,49 @@
+# 动态数据源JTA实现 (atomikos)
+使用atomikos实现动态数据源事务管理
+
+# 数据源配置
+默认数据源配置,使用spring的jta配置即可:
+```yaml
+spring:
+  jta:
+    enabled: 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
+```
+
+动态数据源配置,默认提供一个 ``MemoryJtaDataSourceStore``,在application.yml 中进行配置即可:
+```yaml
+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
+```
+
+自定义,将数据源配置放到数据库中,实现 ``JtaDataSourceStore`` 接口并注入到spring容器即可