Loading pom.xml +15 −2 Original line number Diff line number Diff line Loading @@ -9,8 +9,7 @@ <modules> <module>sharding-jdbc-core</module> <module>sharding-jdbc-config-parent</module> <module>sharding-jdbc-transaction</module> <module>sharding-jdbc-transaction-async-job</module> <module>sharding-jdbc-transaction-parent</module> </modules> <properties> Loading Loading @@ -47,7 +46,10 @@ <unitils.core.version>3.4.2</unitils.core.version> <mockito.version>1.10.19</mockito.version> <hamcrest.version>1.3</hamcrest.version> <gson.version>2.6.1</gson.version> <elastic-job.version>1.0.6</elastic-job.version> <maven-compiler-plugin.version>3.3</maven-compiler-plugin.version> <maven-assembly-plugin.version>2.5.5</maven-assembly-plugin.version> <maven-resources-plugin.version>2.7</maven-resources-plugin.version> <maven-jar-plugin.version>2.6</maven-jar-plugin.version> <maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version> Loading @@ -68,6 +70,7 @@ <taglist-maven-plugin.version>2.4</taglist-maven-plugin.version> <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version> <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable> </properties> <dependencyManagement> Loading Loading @@ -255,6 +258,16 @@ <version>${springframework.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-core</artifactId> <version>${elastic-job.version}</version> </dependency> </dependencies> </dependencyManagement> Loading sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd +2 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,12 @@ </xsd:element> <xsd:element name="sharding-rule"> <xsd:complexType> <xsd:all> <xsd:sequence> <xsd:element ref="table-rules" minOccurs="1" maxOccurs="1"/> <xsd:element ref="binding-table-rules" minOccurs="0" maxOccurs="1"/> <xsd:element ref="default-database-strategy" minOccurs="0" maxOccurs="1"/> <xsd:element ref="default-table-strategy" minOccurs="0" maxOccurs="1"/> </xsd:all> </xsd:sequence> <xsd:attribute name="data-sources" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> Loading sharding-jdbc-doc/content/post/configuration.md +48 −48 Original line number Diff line number Diff line Loading @@ -189,8 +189,8 @@ props: 属性配置(可选) 定义sharding-jdbc数据源 | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | --------- | ------ | -------------- | | id | 属性 | String | 是 | Spring Bean ID | | sharding-rule | 标签 | - | 是 | 分片规则 | | binding-table-rules`?` | 标签 | - | 是 | 绑定表规则 | Loading @@ -200,50 +200,50 @@ props: 属性配置(可选) ### \<rdb:sharding-rule/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------------------------------ | | data-sources | 属性 | String | 是 | 数据源Bean列表,多个Bean以逗号分隔 | | table-rules | 标签 | - | 是 | 分片规则列表 | ### \<rdb:table-rules/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ----------- | ---------- | ------ | ------- | | table-rule`+` | 标签 | - | 是 | 分片规则 | ### \<rdb:table-rule/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | -------------------- | ------------ | ---------- | ------ | ------- | | logic-table | 属性 | String | 是 | 逻辑表名 | actual-tables | 属性 | String | 否 | 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源 指定数据源需要加前缀,不加前缀为默认数据源。不填写表示使用动态表配置 | | actual-tables | 属性 | String | 否 | 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源 指定数据源需要加前缀,不加前缀为默认数据源。不填写表示使用动态表配置 | | database-strategy | 属性 | String | 否 | 分库策略,对应`<rdb:strategy>`中分库策略id, 如果不填需配置`<rdb:default-database-strategy/>` | | table-strategy | 属性 | String | 否 | 分表策略,对应`<rdb:strategy>`中分表策略id, 如果不填需配置`<rdb:default-table-strategy/>` | ### \<rdb:binding-table-rules/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ----------- | --------- | ------ | ------- | | binding-table-rule | 标签 | - | 是 | 绑定规则 | ### \<rdb:binding-table-rule/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------------------------ | | logic-tables | 属性 | String | 是 | 逻辑表名,多个表名以逗号分隔 | ### \<rdb:default-database-strategy/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------- | | sharding-columns | 属性 | String | 是 | 分片列名,多个列以逗号分隔 | | algorithm-class | 属性 | Class | 否 | 默认分库算法全类名,该类需使用默认的构造器或者提供无参数的构造器,与`algorithm-expression`有且仅有一个出现 | | algorithm-expression | 属性 | String | 否 | 默认分库算法表达式,与`algorithm-class`有且仅有一个出现 | ### \<rdb:default-table-strategy/\> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | --------- | ------ | ------- | | sharding-columns | 属性 | String | 是 | 分片列名,多个列以逗号分隔 | | algorithm-class | 属性 | Class | 否 | 默认分表算法全类名,该类需使用默认的构造器或者提供无参数的构造器,与`algorithm-expression`有且仅有一个出现 | | algorithm-expression | 属性 | String | 否 | 默认分表算法表达式,与`algorithm-class`有且仅有一个出现 | Loading @@ -252,8 +252,8 @@ props: 属性配置(可选) 定义数据分库或分表策略 | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------- | | id | 属性 | String | 是 | Spring Bean ID | | sharding-columns | 属性 | String | 是 | 分片列名,多个列以逗号分隔 | | algorithm-class | 属性 | Class | 否 | 分库或分表算法全类名,该类需使用默认的构造器或者提供无参数的构造器,与`algorithm-expression`有且仅有一个出现 | Loading @@ -261,8 +261,8 @@ props: 属性配置(可选) ### \<rdb:props/\> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | ------------------------------------ | ------------ | ---------- | -----| ------------------------------------| | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ------------------------------------ | ------------ | ---------- | ----- | ----------------------------------- | | metrics.enable | 属性 | boolean | 否 | 是否开启度量采集,默认为false不开启 | | metrics.millisecond.period | 属性 | String | 否 | 度量输出周期,单位为毫秒 | | metrics.logger.name | 属性 | String | 否 | 度量输出在日志中的标识名称 | Loading Loading @@ -306,7 +306,7 @@ data_source_${id.longValue() % 2 + 1} 方法列表如下: | *方法名* | *入参* | *返回类型* | | ------------------------ | -------------- | ---------------| | ------------------------ | -------------- | -------------- | | longValue() | | long | | doubleValue() | | double | | dateValue(String format) | 时间格式化表达式 | java.util.Date | Loading sharding-jdbc-doc/content/post/release_notes.md +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ weight = 1 ### 新功能 1. [ISSUE #53](https://github.com/dangdangdotcom/sharding-jdbc/issues/53) 动态表配置 1. [ISSUE #58](https://github.com/dangdangdotcom/sharding-jdbc/issues/58) 柔性事务:最大努力送达型 ### 结构调整 Loading sharding-jdbc-doc/content/post/soft_transaction.md +108 −60 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ weight = 6 ## 架构图  ## 使用场景 ## 适用场景 * 根据主键删除数据。 * 更新记录永久状态,如更新通知送达状态。 Loading @@ -24,76 +24,124 @@ weight = 6 * DELETE语句无要求。 ## 开发指南 * `Sharding-JDBC-trnasaction`完全基于`java`开发,直接提供`jar`包,可直接使用maven导入坐标即可使用。 * 由于柔性事务采用异步尝试,需要部署独立的作业和`Zookeeper`。`Sharding-JDBC-trnasaction`采用`elastic-job`实现的`Sharding-JDBC-trnasaction-async-job`,通过简单配置即可启动高可用作业异步送达柔性事务。作业可自行打包,并通过`main`方法启动。(目前独立作业的配置部分还在开发中) * 为了便于开发,`Sharding-JDBC-trnasaction`提供了内嵌异步作业,配置方法可参见事务管理器工厂配置项。 * 为了保证事务不丢失,`Sharding-JDBC-trnasaction`需要提供数据库存储事务日志,配置方法可参见事务管理器工厂配置项。 * 为了便于开发,`Sharding-JDBC-trnasaction`提供了基于内存的事务日志存储器,配置方法可参见事务管理器工厂配置项。 ## 开发步骤 1. 配置`SoftTransactionConfiguration` * `Sharding-JDBC-transaction`完全基于`java`开发,直接提供`jar`包,可直接使用maven导入坐标即可使用。 * 为了保证事务不丢失,`Sharding-JDBC-transaction`需要提供数据库存储事务日志,配置方法可参见事务管理器配置项。 * 由于柔性事务采用异步尝试,需要部署独立的作业和`Zookeeper`。`Sharding-JDBC-transaction`采用`elastic-job`实现的`Sharding-JDBC-transaction-async-job`,通过简单配置即可启动高可用作业异步送达柔性事务,启动脚本为`start.sh`。 * 为了便于开发,`Sharding-JDBC-transaction`提供了基于内存的事务日志存储器和内嵌异步作业。 ## 开发示例 ```java // 1. 配置SoftTransactionConfiguration SoftTransactionConfiguration transactionConfig = new SoftTransactionConfiguration(dataSource); transactionConfig.setXXX(); ``` 2. 初始化`SoftTransactionManagerFactory` ```java SoftTransactionManagerFactory transactionManagerFactory = new SoftTransactionManagerFactory(transactionConfig); transactionManagerFactory.init(); ``` 3. 获取`BEDSoftTransactionManager` ```java BEDSoftTransactionManager transactionManager = (BEDSoftTransactionManager) transactionManagerFactory.getTransactionManager(SoftTransactionType.BestEffortsDelivery); ``` // 2. 初始化SoftTransactionManager SoftTransactionManager transactionManager = new SoftTransactionManager(transactionConfig); transactionManager.init(); 4. 开启事务 ```java transactionManager.begin(connection); ``` // 3. 获取BEDSoftTransaction BEDSoftTransaction transaction = (BEDSoftTransaction) transactionManager.getTransaction(SoftTransactionType.BestEffortsDelivery); 5. 执行`JDBC` // 4. 开启事务 transaction.begin(connection); 6. 关闭事务 ```java transactionManager.end(); // 5. 执行JDBC /* codes here */ * // 6.关闭事务 transaction.end(); ``` ## 部署指南 * 部署用于存储事务日志的数据库。 * 部署用于异步作业使用的`Zookeeper`。 * 按照正常`java`项目发布引用`Sharding-JDBC`的`jar`。 * 打包并通过`main`方法启动`Sharding-JDBC-trnasaction-async-job`。 ## 事务管理器工厂配置项 ## 事务管理器配置项 ### `SoftTransactionConfiguration`配置 | 名称 | 类型 | 默认值 | 功能 | | ---------------------------------- | ------------------------------------------ | --------- | ---------------------------------------------------------------- | | syncMaxDeliveryTryTimes | int | 3 | 同步的事务送达的最大尝试次数 | | asyncMaxDeliveryTryTimes | int | 3 | 异步的事务送达的最大尝试次数 | | asyncMaxDeliveryTryDelayMillis | long | 60000 | 执行异步送达事务的延迟毫秒数。早于此间隔时间的入库事务才会被异步作业执行 | | storageType | enum | DATABASE | 事务日志存储类型。可选值: DATABASE, MEMORY。使用DATABASE类型将自动建表 | | transactionLogDataSource | DataSource | null | 存储事务日志的数据源 | | nestedJob | boolean | false | 是否使用内嵌的作业处理异步事务送达 | | bestEffortsDeliveryJobConfiguration| AbstractBestEffortsDeliveryJobConfiguration| null | 最大努力送达型异步作业配置对象 | 用于配置事务管理器。 ### `BestEffortsDeliveryJobConfiguration`配置 用于配置异步送达作业。使用`elastic-job`实现的高可用弹性作业,可直接用于生产环境。如果`SoftTransactionConfiguration`的`nestedJob`为`false`,请使用此对象配置异步作业。 | 名称 | 类型 | 默认值 | 功能 | | ---------------------------------- | --------------------------- | --------- | -------------------------------------- | | zookeeperConnectionString | String | null | 注册中心的连接地址 | | *名称* | *类型* | *必填* | *默认值* | *说明* | | ---------------------------------- | ------------------------------------------ | ------ | --------- | ------------------------------------------------------------------------------------------- | | shardingDataSource | ShardingDataSource | `是` | | 事务管理器管理的数据源 | | syncMaxDeliveryTryTimes | int | 否 | 3 | 同步的事务送达的最大尝试次数 | | storageType | enum | 否 | RDB | 事务日志存储类型。可选值: RDB,MEMORY。使用RDB类型将自动建表 | | transactionLogDataSource | DataSource | 否 | null | 存储事务日志的数据源,如果storageType为RDB则必填 | | bestEffortsDeliveryJobConfiguration| NestedBestEffortsDeliveryJobConfiguration | 否 | null | 最大努力送达型内嵌异步作业配置对象。如需使用,请参考`NestedBestEffortsDeliveryJobConfiguration`配置 | ### `NestedBestEffortsDeliveryJobConfiguration`配置 (仅开发环境) 用于配置内嵌的异步作业,仅用于开发环境。生产环境应使用独立部署的作业版本。 ### `NestedBestEffortsDeliveryJobConfiguration`配置 用于配置内嵌的异步作业,仅用于开发环境。生产环境应使用独立部署的作业版本。如果`SoftTransactionConfiguration`的`nestedJob`为`true`,请使用此对象配置异步作业。 | 名称 | 类型 | 默认值 | 功能 | | ---------------------------------- | --------------------------- | ------------------------ | -------------------------------------- | | zookeeperPort | int | 4181 | 内嵌的注册中心端口号 | | zookeeperDataDir | String | target/test_zk_data/nano/| 异步的事务送达的最大尝试次数 | | *名称* | *类型* | *必填* | *默认值* | *说明* | | ---------------------------------- | --------------------------- | ------ | ------------------------ | --------------------------------------------------------------- | | zookeeperPort | int | 否 | 4181 | 内嵌的注册中心端口号 | | zookeeperDataDir | String | 否 | target/test_zk_data/nano/| 内嵌的注册中心的数据存放目录 | | asyncMaxDeliveryTryTimes | int | 否 | 3 | 异步的事务送达的最大尝试次数 | | asyncMaxDeliveryTryDelayMillis | long | 否 | 60000 | 执行异步送达事务的延迟毫秒数,早于此间隔时间的入库事务才会被异步作业执行 | ## 独立部署作业指南 * 部署用于存储事务日志的数据库。 * 部署用于异步作业使用的`Zookeeper`。 * 配置`yaml`文件,参照示例。 * 下载并解压文件`sharding-jdbc-transaction-async-job-$VERSION.tar`,通过`start.sh`脚本启动异步作业。 ## 异步作业yaml文件配置 ```yaml #目标数据库的数据源. targetDataSource: ds_0: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds_0 username: root password: ds_1: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds_1 username: root password: #事务日志的数据源. transactionLogDataSource: ds_trans: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/trans_log username: root password: #注册中心配置 zkConfig: #注册中心的连接地址 connectionString: localhost:2181 #作业的命名空间 namespace: Best-Efforts-Delivery-Job #注册中心的等待重试的间隔时间的初始值 baseSleepTimeMilliseconds: 1000 #注册中心的等待重试的间隔时间的最大值 maxSleepTimeMilliseconds: 3000 #注册中心的最大重试次数 maxRetries: 3 #作业配置 jobConfig: #作业名称 name: bestEffortsDeliveryJob #触发作业的cron表达式 cron: 0/5 * * * * ? #每次作业获取的事务日志最大数量 transactionLogFetchDataCount: 100 #事务送达的最大尝试次数. maxDeliveryTryTimes: 3 #执行送达事务的延迟毫秒数,早于此间隔时间的入库事务才会被作业执行 maxDeliveryTryDelayMillis: 60000 ``` # TCC型 开发中... Loading
pom.xml +15 −2 Original line number Diff line number Diff line Loading @@ -9,8 +9,7 @@ <modules> <module>sharding-jdbc-core</module> <module>sharding-jdbc-config-parent</module> <module>sharding-jdbc-transaction</module> <module>sharding-jdbc-transaction-async-job</module> <module>sharding-jdbc-transaction-parent</module> </modules> <properties> Loading Loading @@ -47,7 +46,10 @@ <unitils.core.version>3.4.2</unitils.core.version> <mockito.version>1.10.19</mockito.version> <hamcrest.version>1.3</hamcrest.version> <gson.version>2.6.1</gson.version> <elastic-job.version>1.0.6</elastic-job.version> <maven-compiler-plugin.version>3.3</maven-compiler-plugin.version> <maven-assembly-plugin.version>2.5.5</maven-assembly-plugin.version> <maven-resources-plugin.version>2.7</maven-resources-plugin.version> <maven-jar-plugin.version>2.6</maven-jar-plugin.version> <maven-surefire-plugin.version>2.18.1</maven-surefire-plugin.version> Loading @@ -68,6 +70,7 @@ <taglist-maven-plugin.version>2.4</taglist-maven-plugin.version> <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version> <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable> </properties> <dependencyManagement> Loading Loading @@ -255,6 +258,16 @@ <version>${springframework.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>elastic-job-core</artifactId> <version>${elastic-job.version}</version> </dependency> </dependencies> </dependencyManagement> Loading
sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd +2 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,12 @@ </xsd:element> <xsd:element name="sharding-rule"> <xsd:complexType> <xsd:all> <xsd:sequence> <xsd:element ref="table-rules" minOccurs="1" maxOccurs="1"/> <xsd:element ref="binding-table-rules" minOccurs="0" maxOccurs="1"/> <xsd:element ref="default-database-strategy" minOccurs="0" maxOccurs="1"/> <xsd:element ref="default-table-strategy" minOccurs="0" maxOccurs="1"/> </xsd:all> </xsd:sequence> <xsd:attribute name="data-sources" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> Loading
sharding-jdbc-doc/content/post/configuration.md +48 −48 Original line number Diff line number Diff line Loading @@ -189,8 +189,8 @@ props: 属性配置(可选) 定义sharding-jdbc数据源 | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | --------- | ------ | -------------- | | id | 属性 | String | 是 | Spring Bean ID | | sharding-rule | 标签 | - | 是 | 分片规则 | | binding-table-rules`?` | 标签 | - | 是 | 绑定表规则 | Loading @@ -200,50 +200,50 @@ props: 属性配置(可选) ### \<rdb:sharding-rule/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------------------------------ | | data-sources | 属性 | String | 是 | 数据源Bean列表,多个Bean以逗号分隔 | | table-rules | 标签 | - | 是 | 分片规则列表 | ### \<rdb:table-rules/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ----------- | ---------- | ------ | ------- | | table-rule`+` | 标签 | - | 是 | 分片规则 | ### \<rdb:table-rule/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | -------------------- | ------------ | ---------- | ------ | ------- | | logic-table | 属性 | String | 是 | 逻辑表名 | actual-tables | 属性 | String | 否 | 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源 指定数据源需要加前缀,不加前缀为默认数据源。不填写表示使用动态表配置 | | actual-tables | 属性 | String | 否 | 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源 指定数据源需要加前缀,不加前缀为默认数据源。不填写表示使用动态表配置 | | database-strategy | 属性 | String | 否 | 分库策略,对应`<rdb:strategy>`中分库策略id, 如果不填需配置`<rdb:default-database-strategy/>` | | table-strategy | 属性 | String | 否 | 分表策略,对应`<rdb:strategy>`中分表策略id, 如果不填需配置`<rdb:default-table-strategy/>` | ### \<rdb:binding-table-rules/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ----------- | --------- | ------ | ------- | | binding-table-rule | 标签 | - | 是 | 绑定规则 | ### \<rdb:binding-table-rule/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------------------------ | | logic-tables | 属性 | String | 是 | 逻辑表名,多个表名以逗号分隔 | ### \<rdb:default-database-strategy/> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------- | | sharding-columns | 属性 | String | 是 | 分片列名,多个列以逗号分隔 | | algorithm-class | 属性 | Class | 否 | 默认分库算法全类名,该类需使用默认的构造器或者提供无参数的构造器,与`algorithm-expression`有且仅有一个出现 | | algorithm-expression | 属性 | String | 否 | 默认分库算法表达式,与`algorithm-class`有且仅有一个出现 | ### \<rdb:default-table-strategy/\> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | --------- | ------ | ------- | | sharding-columns | 属性 | String | 是 | 分片列名,多个列以逗号分隔 | | algorithm-class | 属性 | Class | 否 | 默认分表算法全类名,该类需使用默认的构造器或者提供无参数的构造器,与`algorithm-expression`有且仅有一个出现 | | algorithm-expression | 属性 | String | 否 | 默认分表算法表达式,与`algorithm-class`有且仅有一个出现 | Loading @@ -252,8 +252,8 @@ props: 属性配置(可选) 定义数据分库或分表策略 | *名称* | 类型 | *数据类型* | *必填*| *说明* | | -------------------- | -------- | --------- | ------| ----- | | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ----------------------------- | ------------ | ---------- | ------ | ------- | | id | 属性 | String | 是 | Spring Bean ID | | sharding-columns | 属性 | String | 是 | 分片列名,多个列以逗号分隔 | | algorithm-class | 属性 | Class | 否 | 分库或分表算法全类名,该类需使用默认的构造器或者提供无参数的构造器,与`algorithm-expression`有且仅有一个出现 | Loading @@ -261,8 +261,8 @@ props: 属性配置(可选) ### \<rdb:props/\> | *名称* | 类型 | *数据类型* | *必填*| *说明* | | ------------------------------------ | ------------ | ---------- | -----| ------------------------------------| | *名称* | *类型* | *数据类型* | *必填* | *说明* | | ------------------------------------ | ------------ | ---------- | ----- | ----------------------------------- | | metrics.enable | 属性 | boolean | 否 | 是否开启度量采集,默认为false不开启 | | metrics.millisecond.period | 属性 | String | 否 | 度量输出周期,单位为毫秒 | | metrics.logger.name | 属性 | String | 否 | 度量输出在日志中的标识名称 | Loading Loading @@ -306,7 +306,7 @@ data_source_${id.longValue() % 2 + 1} 方法列表如下: | *方法名* | *入参* | *返回类型* | | ------------------------ | -------------- | ---------------| | ------------------------ | -------------- | -------------- | | longValue() | | long | | doubleValue() | | double | | dateValue(String format) | 时间格式化表达式 | java.util.Date | Loading
sharding-jdbc-doc/content/post/release_notes.md +1 −0 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ weight = 1 ### 新功能 1. [ISSUE #53](https://github.com/dangdangdotcom/sharding-jdbc/issues/53) 动态表配置 1. [ISSUE #58](https://github.com/dangdangdotcom/sharding-jdbc/issues/58) 柔性事务:最大努力送达型 ### 结构调整 Loading
sharding-jdbc-doc/content/post/soft_transaction.md +108 −60 Original line number Diff line number Diff line Loading @@ -11,7 +11,7 @@ weight = 6 ## 架构图  ## 使用场景 ## 适用场景 * 根据主键删除数据。 * 更新记录永久状态,如更新通知送达状态。 Loading @@ -24,76 +24,124 @@ weight = 6 * DELETE语句无要求。 ## 开发指南 * `Sharding-JDBC-trnasaction`完全基于`java`开发,直接提供`jar`包,可直接使用maven导入坐标即可使用。 * 由于柔性事务采用异步尝试,需要部署独立的作业和`Zookeeper`。`Sharding-JDBC-trnasaction`采用`elastic-job`实现的`Sharding-JDBC-trnasaction-async-job`,通过简单配置即可启动高可用作业异步送达柔性事务。作业可自行打包,并通过`main`方法启动。(目前独立作业的配置部分还在开发中) * 为了便于开发,`Sharding-JDBC-trnasaction`提供了内嵌异步作业,配置方法可参见事务管理器工厂配置项。 * 为了保证事务不丢失,`Sharding-JDBC-trnasaction`需要提供数据库存储事务日志,配置方法可参见事务管理器工厂配置项。 * 为了便于开发,`Sharding-JDBC-trnasaction`提供了基于内存的事务日志存储器,配置方法可参见事务管理器工厂配置项。 ## 开发步骤 1. 配置`SoftTransactionConfiguration` * `Sharding-JDBC-transaction`完全基于`java`开发,直接提供`jar`包,可直接使用maven导入坐标即可使用。 * 为了保证事务不丢失,`Sharding-JDBC-transaction`需要提供数据库存储事务日志,配置方法可参见事务管理器配置项。 * 由于柔性事务采用异步尝试,需要部署独立的作业和`Zookeeper`。`Sharding-JDBC-transaction`采用`elastic-job`实现的`Sharding-JDBC-transaction-async-job`,通过简单配置即可启动高可用作业异步送达柔性事务,启动脚本为`start.sh`。 * 为了便于开发,`Sharding-JDBC-transaction`提供了基于内存的事务日志存储器和内嵌异步作业。 ## 开发示例 ```java // 1. 配置SoftTransactionConfiguration SoftTransactionConfiguration transactionConfig = new SoftTransactionConfiguration(dataSource); transactionConfig.setXXX(); ``` 2. 初始化`SoftTransactionManagerFactory` ```java SoftTransactionManagerFactory transactionManagerFactory = new SoftTransactionManagerFactory(transactionConfig); transactionManagerFactory.init(); ``` 3. 获取`BEDSoftTransactionManager` ```java BEDSoftTransactionManager transactionManager = (BEDSoftTransactionManager) transactionManagerFactory.getTransactionManager(SoftTransactionType.BestEffortsDelivery); ``` // 2. 初始化SoftTransactionManager SoftTransactionManager transactionManager = new SoftTransactionManager(transactionConfig); transactionManager.init(); 4. 开启事务 ```java transactionManager.begin(connection); ``` // 3. 获取BEDSoftTransaction BEDSoftTransaction transaction = (BEDSoftTransaction) transactionManager.getTransaction(SoftTransactionType.BestEffortsDelivery); 5. 执行`JDBC` // 4. 开启事务 transaction.begin(connection); 6. 关闭事务 ```java transactionManager.end(); // 5. 执行JDBC /* codes here */ * // 6.关闭事务 transaction.end(); ``` ## 部署指南 * 部署用于存储事务日志的数据库。 * 部署用于异步作业使用的`Zookeeper`。 * 按照正常`java`项目发布引用`Sharding-JDBC`的`jar`。 * 打包并通过`main`方法启动`Sharding-JDBC-trnasaction-async-job`。 ## 事务管理器工厂配置项 ## 事务管理器配置项 ### `SoftTransactionConfiguration`配置 | 名称 | 类型 | 默认值 | 功能 | | ---------------------------------- | ------------------------------------------ | --------- | ---------------------------------------------------------------- | | syncMaxDeliveryTryTimes | int | 3 | 同步的事务送达的最大尝试次数 | | asyncMaxDeliveryTryTimes | int | 3 | 异步的事务送达的最大尝试次数 | | asyncMaxDeliveryTryDelayMillis | long | 60000 | 执行异步送达事务的延迟毫秒数。早于此间隔时间的入库事务才会被异步作业执行 | | storageType | enum | DATABASE | 事务日志存储类型。可选值: DATABASE, MEMORY。使用DATABASE类型将自动建表 | | transactionLogDataSource | DataSource | null | 存储事务日志的数据源 | | nestedJob | boolean | false | 是否使用内嵌的作业处理异步事务送达 | | bestEffortsDeliveryJobConfiguration| AbstractBestEffortsDeliveryJobConfiguration| null | 最大努力送达型异步作业配置对象 | 用于配置事务管理器。 ### `BestEffortsDeliveryJobConfiguration`配置 用于配置异步送达作业。使用`elastic-job`实现的高可用弹性作业,可直接用于生产环境。如果`SoftTransactionConfiguration`的`nestedJob`为`false`,请使用此对象配置异步作业。 | 名称 | 类型 | 默认值 | 功能 | | ---------------------------------- | --------------------------- | --------- | -------------------------------------- | | zookeeperConnectionString | String | null | 注册中心的连接地址 | | *名称* | *类型* | *必填* | *默认值* | *说明* | | ---------------------------------- | ------------------------------------------ | ------ | --------- | ------------------------------------------------------------------------------------------- | | shardingDataSource | ShardingDataSource | `是` | | 事务管理器管理的数据源 | | syncMaxDeliveryTryTimes | int | 否 | 3 | 同步的事务送达的最大尝试次数 | | storageType | enum | 否 | RDB | 事务日志存储类型。可选值: RDB,MEMORY。使用RDB类型将自动建表 | | transactionLogDataSource | DataSource | 否 | null | 存储事务日志的数据源,如果storageType为RDB则必填 | | bestEffortsDeliveryJobConfiguration| NestedBestEffortsDeliveryJobConfiguration | 否 | null | 最大努力送达型内嵌异步作业配置对象。如需使用,请参考`NestedBestEffortsDeliveryJobConfiguration`配置 | ### `NestedBestEffortsDeliveryJobConfiguration`配置 (仅开发环境) 用于配置内嵌的异步作业,仅用于开发环境。生产环境应使用独立部署的作业版本。 ### `NestedBestEffortsDeliveryJobConfiguration`配置 用于配置内嵌的异步作业,仅用于开发环境。生产环境应使用独立部署的作业版本。如果`SoftTransactionConfiguration`的`nestedJob`为`true`,请使用此对象配置异步作业。 | 名称 | 类型 | 默认值 | 功能 | | ---------------------------------- | --------------------------- | ------------------------ | -------------------------------------- | | zookeeperPort | int | 4181 | 内嵌的注册中心端口号 | | zookeeperDataDir | String | target/test_zk_data/nano/| 异步的事务送达的最大尝试次数 | | *名称* | *类型* | *必填* | *默认值* | *说明* | | ---------------------------------- | --------------------------- | ------ | ------------------------ | --------------------------------------------------------------- | | zookeeperPort | int | 否 | 4181 | 内嵌的注册中心端口号 | | zookeeperDataDir | String | 否 | target/test_zk_data/nano/| 内嵌的注册中心的数据存放目录 | | asyncMaxDeliveryTryTimes | int | 否 | 3 | 异步的事务送达的最大尝试次数 | | asyncMaxDeliveryTryDelayMillis | long | 否 | 60000 | 执行异步送达事务的延迟毫秒数,早于此间隔时间的入库事务才会被异步作业执行 | ## 独立部署作业指南 * 部署用于存储事务日志的数据库。 * 部署用于异步作业使用的`Zookeeper`。 * 配置`yaml`文件,参照示例。 * 下载并解压文件`sharding-jdbc-transaction-async-job-$VERSION.tar`,通过`start.sh`脚本启动异步作业。 ## 异步作业yaml文件配置 ```yaml #目标数据库的数据源. targetDataSource: ds_0: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds_0 username: root password: ds_1: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/ds_1 username: root password: #事务日志的数据源. transactionLogDataSource: ds_trans: !!org.apache.commons.dbcp.BasicDataSource driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/trans_log username: root password: #注册中心配置 zkConfig: #注册中心的连接地址 connectionString: localhost:2181 #作业的命名空间 namespace: Best-Efforts-Delivery-Job #注册中心的等待重试的间隔时间的初始值 baseSleepTimeMilliseconds: 1000 #注册中心的等待重试的间隔时间的最大值 maxSleepTimeMilliseconds: 3000 #注册中心的最大重试次数 maxRetries: 3 #作业配置 jobConfig: #作业名称 name: bestEffortsDeliveryJob #触发作业的cron表达式 cron: 0/5 * * * * ? #每次作业获取的事务日志最大数量 transactionLogFetchDataCount: 100 #事务送达的最大尝试次数. maxDeliveryTryTimes: 3 #执行送达事务的延迟毫秒数,早于此间隔时间的入库事务才会被作业执行 maxDeliveryTryDelayMillis: 60000 ``` # TCC型 开发中...