This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new b25419a  Fixes #12158, add configuration for whether enable consistent 
routing for readwrite splitting. (#12209)
b25419a is described below

commit b25419ae9f4af7a98255740bc603c34d82f34e97
Author: Raigor <[email protected]>
AuthorDate: Sun Sep 5 19:00:52 2021 +0800

    Fixes #12158, add configuration for whether enable consistent routing for 
readwrite splitting. (#12209)
    
    * For #12158, Add the consistencyEnabled configuration for 
readwrite-splitting API & core.
    
    * For #12158, Add the consistencyEnabled default value for DistSQL handler.
    
    * Add consistencyEnabled configuration and parser for Spring Namespace.
    
    * Add consistencyEnabled configuration for examples.
    
    * update documents of readwrite splitting.
    
    * fix CI.
    
    * update more test cases.
    
    * Change `consistencyEnabled` to `queryConsistent`.
    
    * revert blank line.
---
 .../features/readwrite-splitting/use-norms.cn.md   |  7 +++-
 .../features/readwrite-splitting/use-norms.en.md   |  7 +++-
 .../java-api/readwrite-splitting.cn.md             | 14 ++++---
 .../java-api/readwrite-splitting.en.md             |  2 +
 .../spring-boot-starter/readwrite-splitting.cn.md  |  2 +
 .../spring-boot-starter/readwrite-splitting.en.md  |  2 +
 .../spring-namespace/readwrite-splitting.cn.md     |  2 +
 .../spring-namespace/readwrite-splitting.en.md     | 12 +++---
 .../configuration/yaml/readwrite-splitting .cn.md  |  2 +
 .../configuration/yaml/readwrite-splitting.en.md   |  2 +
 .../LocalReadwriteSplittingConfiguration.java      |  2 +-
 ...calShardingReadwriteSplittingConfiguration.java |  4 +-
 ...writeSplittingShadowDatabasesConfiguration.java |  2 +-
 .../config/ReadwriteSplittingConfiguration.java    |  2 +-
 ...dingReadwriteSplittingConfigurationPrecise.java |  4 +-
 ...ardingReadwriteSplittingConfigurationRange.java |  4 +-
 .../META-INF/sharding-readwrite-splitting.yaml     |  2 +
 ...ication-sharding-readwrite-splitting.properties |  2 +
 ...ication-sharding-readwrite-splitting.properties |  2 +
 .../application-sharding-readwrite-splitting.xml   |  4 +-
 .../META-INF/application-readwrite-splitting.xml   |  2 +-
 ...dwriteSplittingDataSourceRuleConfiguration.java |  2 +
 .../impl/ReadwriteSplittingDataSourceRouter.java   |  4 +-
 .../rule/ReadwriteSplittingDataSourceRule.java     |  3 ++
 ...dwriteSplittingDataSourceRuleConfiguration.java |  2 +
 ...eAlgorithmProviderConfigurationYamlSwapper.java |  4 +-
 ...writeSplittingRuleConfigurationYamlSwapper.java |  4 +-
 .../route/ReadwriteSplittingSQLRouterTest.java     | 43 +++++++++++++++++++++-
 .../rule/ReadwriteSplittingDataSourceRuleTest.java | 12 +++---
 .../rule/ReadwriteSplittingRuleTest.java           |  4 +-
 ...mProvidedReadwriteSplittingRuleBuilderTest.java |  2 +-
 .../builder/ReadwriteSplittingRuleBuilderTest.java |  2 +-
 ...orithmProviderConfigurationYamlSwapperTest.java |  5 ++-
 ...eSplittingRuleConfigurationYamlSwapperTest.java | 18 ++++++++-
 .../ReadwriteSplittingRuleStatementConverter.java  |  4 +-
 .../ReadwriteSplittingRuleQueryResultSetTest.java  |  4 +-
 ...ReadwriteSplittingRuleStatementUpdaterTest.java |  2 +-
 ...ReadwriteSplittingRuleStatementUpdaterTest.java |  2 +-
 ...ReadwriteSplittingRuleStatementUpdaterTest.java |  6 +--
 .../ReadwriteSplittingSpringBootStarterTest.java   |  2 +
 ...ReadwriteSplittingRuleBeanDefinitionParser.java |  1 +
 .../ReadwriteSplittingRuleBeanDefinitionTag.java   |  2 +
 .../META-INF/namespace/readwrite-splitting.xsd     |  3 +-
 .../ReadwriteSplittingSpringNamespaceTest.java     |  3 ++
 .../spring/boot/SpringBootStarterTest.java         |  2 +
 ...espaceWithReadwriteSplittingForClusterTest.java |  2 +
 46 files changed, 170 insertions(+), 50 deletions(-)

diff --git a/docs/document/content/features/readwrite-splitting/use-norms.cn.md 
b/docs/document/content/features/readwrite-splitting/use-norms.cn.md
index 0d9efd8..7ea15da 100644
--- a/docs/document/content/features/readwrite-splitting/use-norms.cn.md
+++ b/docs/document/content/features/readwrite-splitting/use-norms.cn.md
@@ -8,7 +8,6 @@ weight = 2
 
 * 提供一主多从的读写分离配置,可独立使用,也可配合分库分表使用;
 * 独立使用读写分离支持SQL透传;
-* 同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性;
 * 基于Hint的强制主库路由。
 
 ## 不支持项
@@ -17,3 +16,9 @@ weight = 2
 * 主库和从库的数据同步延迟导致的数据不一致;
 * 主库双写或多写;
 * 跨主库和从库之间的事务的数据不一致。主从模型中,事务中读写均用主库。
+
+## 可选项
+
+| 配置项           | 详细说明                                                         
                              | 默认值  | 适用范围            |
+|:--------------- 
|:---------------------------------------------------------------------------------------------
 |:------ |:------------------- |
+| queryConsistent | 该配置为 `true` 时,若在同一线程且同一数据库连接内有写入操作,以后的读操作均从主库读取,用于保证数据一致性 
| false | ShardingSphere-JDBC |
diff --git a/docs/document/content/features/readwrite-splitting/use-norms.en.md 
b/docs/document/content/features/readwrite-splitting/use-norms.en.md
index b6be3a8..ecf15d9 100644
--- a/docs/document/content/features/readwrite-splitting/use-norms.en.md
+++ b/docs/document/content/features/readwrite-splitting/use-norms.en.md
@@ -8,7 +8,6 @@ weight = 2
 
 * Provide the replica query configuration of one primary database with 
multiple replica databases, which can be used alone or with sharding table and 
database;
 * Support SQL pass-through in independent use of replica query;
-* If there is write operation in the same thread and database connection, all 
the following read operations are from the primary database to ensure data 
consistency;
 * Forcible primary database route based on SQL Hint;
 
 ## Unsupported Items
@@ -18,3 +17,9 @@ weight = 2
 * Double or multiple primary databases to provide write operation;
 * The data for transaction across primary and replica nodes are inconsistent. 
 In the replica query model, the primary nodes need to be used for both reading 
and writing in the transaction.
+
+## Optional Items
+
+| Item            | Description                                                
                                                                                
                                                 | Default | Range Of 
Application |
+|:--------------- 
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 |:------- |:-------------------- |
+| queryConsistent | When the value is `true`, if there is write operation in 
the same thread and database connection, all the following read operations are 
from the write database to ensure data consistency; | false   | 
ShardingSphere-JDBC  |
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.cn.md
index d02716c..81d43c0 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.cn.md
@@ -20,11 +20,13 @@ weight = 2
 
 可配置属性:
 
-| *名称*                     | *数据类型*             | *说明*             | *默认值*     
  |
-| -------------------------- | -------------------- | ----------------- | 
------------ |
-| name                       | String               | 读写分离数据源名称   | -          
   |
-| writeDataSourceName        | String               | 写库数据源名称      | -         
    |
-| readDataSourceNames (+)    | Collection\<String\> | 读库数据源名称列表   | -          
   |
-| loadBalancerName (?)       | String               | 读库负载均衡算法名称 | 轮询负载均衡算法 |
+| *名称*                     | *数据类型*             | *说明*              | *默认值*    
   |
+| -------------------------- | -------------------- | ------------------- | 
------------- |
+| name                       | String               | 读写分离数据源名称    | -         
    |
+| writeDataSourceName        | String               | 写库数据源名称        | -       
      |
+| readDataSourceNames (+)    | Collection\<String\> | 读库数据源名称列表    | -         
    |
+| loadBalancerName (?)       | String               | 读库负载均衡算法名称  | 轮询负载均衡算法 |
+| queryConsistent (?)        | boolean              | 是否启用查询一致性路由 | false      
   |
 
 
算法类型的详情,请参见[内置负载均衡算法列表](/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)。
+查询一致性路由的详情,请参见[使用规范](/cn/features/readwrite-splitting/use-norms)。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.en.md
index 6b5dc34..eea0262 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/java-api/readwrite-splitting.en.md
@@ -26,5 +26,7 @@ Attributes:
 | writeDataSourceName        | String               | Write sources source 
name                      | -                                  |
 | readDataSourceNames (+)    | Collection\<String\> | Read sources source name 
list                  | -                                  |
 | loadBalancerName (?)       | String               | Load balance algorithm 
name of replica sources | Round robin load balance algorithm |
+| queryConsistent (?)        | boolean              | Whether to enable query 
consistent routing     | false                              |
 
 Please refer to [Built-in Load Balance Algorithm 
List](/en/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)
 for more details about type of algorithm.
+Please refer to [Use Norms](/en/features/readwrite-splitting/use-norms) for 
more details about query consistent routing.
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.cn.md
index c810e97..34b6f3b 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.cn.md
@@ -11,6 +11,7 @@ spring.shardingsphere.datasource.names= # 省略数据源配置,请参考使
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.write-data-source-name=
 # 写数据源名称
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.read-data-source-names=
 # 读数据源名称,多个从数据源用逗号分隔
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.load-balancer-name=
 # 负载均衡算法名称
+spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.query-consistent=
 # 是否启用查询一致性路由
 
 # 负载均衡算法配置
 
spring.shardingsphere.rules.readwrite-splitting.load-balancers.<load-balance-algorithm-name>.type=
 # 负载均衡算法类型
@@ -18,3 +19,4 @@ 
spring.shardingsphere.rules.readwrite-splitting.load-balancers.<load-balance-alg
 ```
 
 
算法类型的详情,请参见[内置负载均衡算法列表](/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)。
+查询一致性路由的详情,请参见[使用规范](/cn/features/readwrite-splitting/use-norms)。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.en.md
index add46da..457d1e4 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/readwrite-splitting.en.md
@@ -11,6 +11,7 @@ spring.shardingsphere.datasource.names= # Omit the data 
source configuration, pl
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.primary-data-source-name=
 # Write data source name
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.replica-data-source-names=
 # Read data source names, multiple data source names separated with comma
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.load-balancer-name=
 # Load balance algorithm name
+spring.shardingsphere.rules.readwrite-splitting.data-sources.<readwrite-splitting-data-source-name>.query-consistent=
 # Whether to enable query consistent routing
 
 # Load balance algorithm configuration
 
spring.shardingsphere.rules.readwrite-splitting.load-balancers.<load-balance-algorithm-name>.type=
 # Load balance algorithm type
@@ -18,3 +19,4 @@ 
spring.shardingsphere.rules.readwrite-splitting.load-balancers.<load-balance-alg
 ```
 
 Please refer to [Built-in Load Balance Algorithm 
List](/en/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)
 for more details about type of algorithm.
+Please refer to [Use Norms](/en/features/readwrite-splitting/use-norms) for 
more details about query consistent routing.
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.cn.md
index b67b706..c81ed43 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.cn.md
@@ -22,6 +22,7 @@ weight = 2
 | write-data-source-name     | 属性  | 写数据源名称                      |
 | read-data-source-names     | 属性  | 读数据源名称,多个读数据源用逗号分隔 |
 | load-balance-algorithm-ref | 属性  | 负载均衡算法名称                   |
+| query-consistent           | 属性  | 是否启用查询一致性路由              |
 
 
 \<readwrite-splitting:load-balance-algorithm />
@@ -33,3 +34,4 @@ weight = 2
 | props (?) | 标签  | 负载均衡算法属性配置 |
 
 
算法类型的详情,请参见[内置负载均衡算法列表](/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)。
+查询一致性路由的详情,请参见[使用规范](/cn/features/readwrite-splitting/use-norms)。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.en.md
index ff5bc2e..e192c05 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/spring-namespace/readwrite-splitting.en.md
@@ -16,12 +16,13 @@ Namespace: 
[http://shardingsphere.apache.org/schema/shardingsphere/readwrite-spl
 
 \<readwrite-splitting:data-source-rule />
 
-| *Name*                     | *Type*     | *Description*                      
                                        |
-| -------------------------- | ---------- | 
-------------------------------------------------------------------------- |
-| id                         | Attribute  | Readwrite-splitting data source 
rule name                                      |
-| write-data-source-name     | Attribute  | Write data source name             
                                      |
+| *Name*                     | *Type*     | *Description*                      
                                     |
+| -------------------------- | ---------- | 
----------------------------------------------------------------------- |
+| id                         | Attribute  | Readwrite-splitting data source 
rule name                               |
+| write-data-source-name     | Attribute  | Write data source name             
                                     |
 | read-data-source-names     | Attribute  | Read data source names, multiple 
data source names separated with comma |
-| load-balance-algorithm-ref | Attribute  | Load balance algorithm name        
                                        |
+| load-balance-algorithm-ref | Attribute  | Load balance algorithm name        
                                     |
+| query-consistent           | Attribute  | Whether to enable query consistent 
routing                              |
 
 \<readwrite-splitting:load-balance-algorithm />
 
@@ -32,3 +33,4 @@ Namespace: 
[http://shardingsphere.apache.org/schema/shardingsphere/readwrite-spl
 | props (?) | Tag        | Load balance algorithm properties |
 
 Please refer to [Built-in Load Balance Algorithm 
List](/en/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)
 for more details about type of algorithm.
+Please refer to [Use Norms](/en/features/readwrite-splitting/use-norms) for 
more details about query consistent routing.
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting
 .cn.md 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting
 .cn.md
index ae4fcdc..fa47406 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting
 .cn.md       
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting
 .cn.md       
@@ -16,6 +16,7 @@ rules:
       readDataSourceNames: 
         - <read-data_source-name> (+) # 读库数据源名称
       loadBalancerName: # 负载均衡算法名称
+      queryConsistent: # 是否启用查询一致性路由
   
   # 负载均衡算法配置
   loadBalancers:
@@ -29,3 +30,4 @@ props:
 ```
 
 
算法类型的详情,请参见[内置负载均衡算法列表](/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)。
+查询一致性路由的详情,请参见[使用规范](/cn/features/readwrite-splitting/use-norms)。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting.en.md
index 88a8b30..70b25c7 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/configuration/yaml/readwrite-splitting.en.md
@@ -16,6 +16,7 @@ rules:
       readDataSourceNames: 
         - <read-data-source-name> (+) # Read data source name
       loadBalancerName: # Load balance algorithm name
+      queryConsistent: # Whether to enable query consistent routing
   
   # Load balance algorithm configuration
   loadBalancers:
@@ -29,3 +30,4 @@ props:
 ```
 
 Please refer to [Built-in Load Balance Algorithm 
List](/en/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/load-balance)
 for more details about type of algorithm.
+Please refer to [Use Norms](/en/features/readwrite-splitting/use-norms) for 
more details about query consistent routing.
diff --git 
a/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java
 
b/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java
index 083556f..67e0dc9 100644
--- 
a/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java
+++ 
b/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java
@@ -43,7 +43,7 @@ public final class LocalReadwriteSplittingConfiguration 
implements ExampleConfig
     @Override
     public DataSource getDataSource() throws SQLException {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new 
ReadwriteSplittingDataSourceRuleConfiguration(
-                "demo_readwrite_splitting_ds", "", "demo_write_ds", 
Arrays.asList("demo_read_ds_0", "demo_read_ds_1"), null);
+                "demo_readwrite_splitting_ds", "", "demo_write_ds", 
Arrays.asList("demo_read_ds_0", "demo_read_ds_1"), null, false);
         ReadwriteSplittingRuleConfiguration ruleConfig = new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), 
Collections.emptyMap());
         return ShardingSphereDataSourceFactory.createDataSource(modeConfig, 
createDataSourceMap(), Collections.singleton(ruleConfig), new Properties());
     }
diff --git 
a/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfiguration.java
 
b/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfiguration.java
index f117a5f..79187be 100644
--- 
a/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfiguration.java
+++ 
b/examples/shardingsphere-jdbc-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfiguration.java
@@ -86,9 +86,9 @@ public final class 
LocalShardingReadwriteSplittingConfiguration implements Examp
     
     private ReadwriteSplittingRuleConfiguration 
getReadwriteSplittingRuleConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration1 
= new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_0", "", "demo_write_ds_0", 
Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1"), null);
+                "ds_0", "", "demo_write_ds_0", 
Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1"), null, false);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration2 
= new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_1", "", "demo_write_ds_1", 
Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1"), null);
+                "ds_1", "", "demo_write_ds_1", 
Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1"), null, false);
         return new 
ReadwriteSplittingRuleConfiguration(Arrays.asList(dataSourceConfiguration1, 
dataSourceConfiguration2), Collections.emptyMap());
     }
     
diff --git 
a/examples/shardingsphere-jdbc-example/other-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/table/raw/jdbc/config/ReadwriteSplittingShadowDatabasesConfiguration.java
 
b/examples/shardingsphere-jdbc-example/other-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/table/raw/jdbc/config/ReadwriteSplittingShadowDatabasesConfiguration.java
index 9123784..2e0a264 100644
--- 
a/examples/shardingsphere-jdbc-example/other-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/table/raw/jdbc/config/ReadwriteSplittingShadowDatabasesConfiguration.java
+++ 
b/examples/shardingsphere-jdbc-example/other-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/table/raw/jdbc/config/ReadwriteSplittingShadowDatabasesConfiguration.java
@@ -45,7 +45,7 @@ public final class 
ReadwriteSplittingShadowDatabasesConfiguration implements Exa
     }
     
     private ReadwriteSplittingRuleConfiguration 
getReadwriteSplittingRuleConfiguration() {
-        ReadwriteSplittingDataSourceRuleConfiguration config = new 
ReadwriteSplittingDataSourceRuleConfiguration("pr_ds", "", "write_ds", 
Collections.singletonList("read_ds"), null);
+        ReadwriteSplittingDataSourceRuleConfiguration config = new 
ReadwriteSplittingDataSourceRuleConfiguration("pr_ds", "", "write_ds", 
Collections.singletonList("read_ds"), null, false);
         return new 
ReadwriteSplittingRuleConfiguration(Collections.singletonList(config), 
Collections.emptyMap());
     }
 }
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ReadwriteSplittingConfiguration.java
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ReadwriteSplittingConfiguration.java
index a67ba90..6d9ead7 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ReadwriteSplittingConfiguration.java
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ReadwriteSplittingConfiguration.java
@@ -36,7 +36,7 @@ public final class ReadwriteSplittingConfiguration implements 
ExampleConfigurati
     @Override
     public DataSource getDataSource() throws SQLException {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new 
ReadwriteSplittingDataSourceRuleConfiguration(
-                "demo_read_query_ds", "", "demo_write_ds", 
Arrays.asList("demo_read_ds_0", "demo_read_ds_1"), null);
+                "demo_read_query_ds", "", "demo_write_ds", 
Arrays.asList("demo_read_ds_0", "demo_read_ds_1"), null, false);
         ReadwriteSplittingRuleConfiguration ruleConfig = new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), 
Collections.emptyMap());
         return 
ShardingSphereDataSourceFactory.createDataSource(createDataSourceMap(), 
Collections.singleton(ruleConfig), new Properties());
     }
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationPrecise.java
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationPrecise.java
index 0cdbc2c..4773145 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationPrecise.java
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationPrecise.java
@@ -82,9 +82,9 @@ public final class 
ShardingReadwriteSplittingConfigurationPrecise implements Exa
     
     private static ReadwriteSplittingRuleConfiguration 
createReadwriteSplittingConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration1 
= new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_0", "", "demo_write_ds_0", 
Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1"), null);
+                "ds_0", "", "demo_write_ds_0", 
Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1"), null, false);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration2 
= new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_1", "","demo_write_ds_1", 
Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1"), null);
+                "ds_1", "","demo_write_ds_1", 
Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1"), null, false);
         return new 
ReadwriteSplittingRuleConfiguration(Arrays.asList(dataSourceConfiguration1, 
dataSourceConfiguration2), Collections.emptyMap());
     }
     
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationRange.java
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationRange.java
index 045585b..7c22b08 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationRange.java
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/raw/jdbc/config/ShardingReadwriteSplittingConfigurationRange.java
@@ -83,9 +83,9 @@ public final class 
ShardingReadwriteSplittingConfigurationRange implements Examp
 
     private static ReadwriteSplittingRuleConfiguration 
createReadwriteSplittingConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration1 
= new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_0", "", "demo_write_ds_0", 
Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1"), null);
+                "ds_0", "", "demo_write_ds_0", 
Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1"), null, false);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration2 
= new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_1", "", "demo_write_ds_1", 
Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1"), null);
+                "ds_1", "", "demo_write_ds_1", 
Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1"), null, false);
         return new 
ReadwriteSplittingRuleConfiguration(Arrays.asList(dataSourceConfiguration1, 
dataSourceConfiguration2), Collections.emptyMap());
     }
     
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml
index 620b270..4617937 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml
@@ -109,10 +109,12 @@ rules:
       writeDataSourceName: write_ds_0
       readDataSourceNames: [write_ds_0_read_0, write_ds_0_read_1]
       loadBalancerName: roundRobin
+      queryConsistent: true
     ds_1:
       writeDataSourceName: write_ds_1
       readDataSourceNames: [write_ds_1_read_0, write_ds_1_read_1]
       loadBalancerName: roundRobin
+      queryConsistent: false
   loadBalancers:
     roundRobin:
       type: ROUND_ROBIN
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties
index 82518cb..8d4c373 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties
@@ -83,7 +83,9 @@ 
spring.shardingsphere.rules.sharding.key-generators.snowflake.props.worker-id=12
 
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.write-data-source-name=write-ds-0
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.read-data-source-names=write-ds-0-read-0,write-ds-0-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.query-consistent=true
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.write-data-source-name=write-ds-1
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.read-data-source-names=write-ds-1-read-0,write-ds-1-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.query-consistent=false
 
 spring.shardingsphere.props.sql-show=true
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties
index 9f9f6c9..152c8ed 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties
@@ -85,5 +85,7 @@ 
spring.shardingsphere.rules.sharding.sharding-algorithms.t-order-item-inline.pro
 
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.write-data-source-name=write-ds-0
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.read-data-source-names=write-ds-0-read-0,
 write-ds-0-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.query-consistent=true
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.write-data-source-name=write-ds-1
 
spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.read-data-source-names=write-ds-1-read-0,
 write-ds-1-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.query-consistent=false
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
index 558a6e5..61544c4 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
@@ -150,8 +150,8 @@
         </sharding:broadcast-table-rules>
     </sharding:rule>
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_pr_ds_0" 
write-data-source-name="demo_write_ds_0" 
read-data-source-names="demo_write_ds_0_read_0, demo_write_ds_0_read_1" 
load-balance-algorithm-ref="randomStrategy" />
-        <readwrite-splitting:data-source-rule id="demo_pr_ds_1" 
write-data-source-name="demo_write_ds_1" 
read-data-source-names="demo_write_ds_1_read_0, demo_write_ds_1_read_1" 
load-balance-algorithm-ref="randomStrategy" />
+        <readwrite-splitting:data-source-rule id="demo_pr_ds_0" 
write-data-source-name="demo_write_ds_0" 
read-data-source-names="demo_write_ds_0_read_0, demo_write_ds_0_read_1" 
load-balance-algorithm-ref="randomStrategy" query-consistent="false" />
+        <readwrite-splitting:data-source-rule id="demo_pr_ds_1" 
write-data-source-name="demo_write_ds_1" 
read-data-source-names="demo_write_ds_1_read_0, demo_write_ds_1_read_1" 
load-balance-algorithm-ref="randomStrategy" query-consistent="true" />
     </readwrite-splitting:rule>
     
     <shardingsphere:data-source id="shardingDataSource" 
data-source-names="demo_write_ds_0,demo_write_ds_1,demo_write_ds_0_read_0, 
demo_write_ds_0_read_1,demo_write_ds_1_read_0, demo_write_ds_1_read_1" 
rule-refs="shardingRule, readWriteSplittingRule">
diff --git 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml
 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml
index 60113ff..1efbd33 100644
--- 
a/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml
+++ 
b/examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml
@@ -59,7 +59,7 @@
     <readwrite-splitting:load-balance-algorithm id="randomStrategy" 
type="RANDOM" />
     
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_ds" 
write-data-source-name="demo_write_ds" read-data-source-names="demo_read_ds_0, 
demo_read_ds_1" load-balance-algorithm-ref="randomStrategy" />
+        <readwrite-splitting:data-source-rule id="demo_ds" 
write-data-source-name="demo_write_ds" read-data-source-names="demo_read_ds_0, 
demo_read_ds_1" load-balance-algorithm-ref="randomStrategy" 
query-consistent="true" />
     </readwrite-splitting:rule>
     
     <shardingsphere:data-source id="readWriteSplittingDataSource" 
data-source-names="demo_write_ds, demo_read_ds_0, demo_read_ds_1" 
rule-refs="readWriteSplittingRule" />
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java
index eb37e6e..e67daea 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java
@@ -38,4 +38,6 @@ public final class 
ReadwriteSplittingDataSourceRuleConfiguration {
     private final List<String> readDataSourceNames;
     
     private final String loadBalancerName;
+    
+    private final boolean queryConsistent;
 }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/impl/ReadwriteSplittingDataSourceRouter.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/impl/ReadwriteSplittingDataSourceRouter.java
index a87ff7b..3328cbe 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/impl/ReadwriteSplittingDataSourceRouter.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/route/impl/ReadwriteSplittingDataSourceRouter.java
@@ -48,7 +48,9 @@ public final class ReadwriteSplittingDataSourceRouter {
      */
     public String route(final SQLStatement sqlStatement) {
         if (isPrimaryRoute(sqlStatement)) {
-            PrimaryVisitedManager.setPrimaryVisited();
+            if (rule.isQueryConsistent()) {
+                PrimaryVisitedManager.setPrimaryVisited();
+            }
             String autoAwareDataSourceName = rule.getAutoAwareDataSourceName();
             if (Strings.isNullOrEmpty(autoAwareDataSourceName)) {
                 return rule.getWriteDataSourceName();
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index 45c9dce..c0b7fdb 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -51,6 +51,8 @@ public final class ReadwriteSplittingDataSourceRule {
     
     private final ReplicaLoadBalanceAlgorithm loadBalancer;
     
+    private final boolean queryConsistent;
+    
     @Getter(AccessLevel.NONE)
     private final Collection<String> disabledDataSourceNames = new HashSet<>();
     
@@ -60,6 +62,7 @@ public final class ReadwriteSplittingDataSourceRule {
         autoAwareDataSourceName = config.getAutoAwareDataSourceName();
         writeDataSourceName = config.getWriteDataSourceName();
         readDataSourceNames = config.getReadDataSourceNames();
+        queryConsistent = config.isQueryConsistent();
         this.loadBalancer = loadBalancer;
     }
     
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
index 69b3ea2..1b9f275 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
@@ -40,5 +40,7 @@ public final class 
YamlReadwriteSplittingDataSourceRuleConfiguration implements
     
     private String loadBalancerName;
     
+    private boolean queryConsistent;
+    
     private Properties props = new Properties();
 }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java
index efb56e2..86d4cc5 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java
@@ -54,6 +54,7 @@ public final class 
ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
         
result.setWriteDataSourceName(dataSourceRuleConfig.getWriteDataSourceName());
         
result.setReadDataSourceNames(dataSourceRuleConfig.getReadDataSourceNames());
         result.setLoadBalancerName(dataSourceRuleConfig.getLoadBalancerName());
+        result.setQueryConsistent(dataSourceRuleConfig.isQueryConsistent());
         return result;
     }
     
@@ -70,7 +71,8 @@ public final class 
ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
     
     private ReadwriteSplittingDataSourceRuleConfiguration swapToObject(final 
String name, final YamlReadwriteSplittingDataSourceRuleConfiguration 
yamlDataSourceRuleConfig) {
         return new ReadwriteSplittingDataSourceRuleConfiguration(name, 
yamlDataSourceRuleConfig.getAutoAwareDataSourceName(),
-                yamlDataSourceRuleConfig.getWriteDataSourceName(), 
yamlDataSourceRuleConfig.getReadDataSourceNames(), 
yamlDataSourceRuleConfig.getLoadBalancerName());
+                yamlDataSourceRuleConfig.getWriteDataSourceName(), 
yamlDataSourceRuleConfig.getReadDataSourceNames(), 
yamlDataSourceRuleConfig.getLoadBalancerName(), 
+                yamlDataSourceRuleConfig.isQueryConsistent());
     }
     
     @Override
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java
index ea1001e..d68721a 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java
@@ -58,6 +58,7 @@ public final class 
ReadwriteSplittingRuleConfigurationYamlSwapper
         
result.setWriteDataSourceName(dataSourceRuleConfig.getWriteDataSourceName());
         
result.setReadDataSourceNames(dataSourceRuleConfig.getReadDataSourceNames());
         result.setLoadBalancerName(dataSourceRuleConfig.getLoadBalancerName());
+        result.setQueryConsistent(dataSourceRuleConfig.isQueryConsistent());
         return result;
     }
     
@@ -76,7 +77,8 @@ public final class 
ReadwriteSplittingRuleConfigurationYamlSwapper
     
     private ReadwriteSplittingDataSourceRuleConfiguration swapToObject(final 
String name, final YamlReadwriteSplittingDataSourceRuleConfiguration 
yamlDataSourceRuleConfig) {
         return new ReadwriteSplittingDataSourceRuleConfiguration(name, 
yamlDataSourceRuleConfig.getAutoAwareDataSourceName(),
-                yamlDataSourceRuleConfig.getWriteDataSourceName(), 
yamlDataSourceRuleConfig.getReadDataSourceNames(), 
yamlDataSourceRuleConfig.getLoadBalancerName());
+                yamlDataSourceRuleConfig.getWriteDataSourceName(), 
yamlDataSourceRuleConfig.getReadDataSourceNames(), 
yamlDataSourceRuleConfig.getLoadBalancerName(), 
+                yamlDataSourceRuleConfig.isQueryConsistent());
     }
     
     @Override
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
index e5957f3..4241be3 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
@@ -37,6 +37,7 @@ import 
org.apache.shardingsphere.spi.ordered.OrderedSPIRegistry;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.InsertStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLInsertStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
 import org.junit.After;
 import org.junit.Before;
@@ -81,7 +82,7 @@ public final class ReadwriteSplittingSQLRouterTest {
     @Before
     public void setUp() {
         rule = new ReadwriteSplittingRule(new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(
-                new 
ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, "", 
WRITE_DATASOURCE, Collections.singletonList(READ_DATASOURCE), null)), 
Collections.emptyMap()));
+                new 
ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, "", 
WRITE_DATASOURCE, Collections.singletonList(READ_DATASOURCE), null, false)), 
Collections.emptyMap()));
         sqlRouter = (ReadwriteSplittingSQLRouter) 
OrderedSPIRegistry.getRegisteredServices(SQLRouter.class, 
Collections.singleton(rule)).get(rule);
     }
     
@@ -179,6 +180,46 @@ public final class ReadwriteSplittingSQLRouterTest {
         assertThat(routedDataSourceNames.next(), is(WRITE_DATASOURCE));
     }
     
+    @Test
+    public void 
assertCreateRouteContextToReadDataSourceWithoutQueryConsistent() {
+        MySQLInsertStatement insertStatement = 
mock(MySQLInsertStatement.class);
+        
when(sqlStatementContext.getSqlStatement()).thenReturn(insertStatement);
+        LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
+        RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
+        Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
+        assertThat(routedDataSourceNames.next(), is(WRITE_DATASOURCE));
+        MySQLSelectStatement selectStatement = 
mock(MySQLSelectStatement.class);
+        
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
+        when(selectStatement.getLock()).thenReturn(Optional.empty());
+        logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
+        actual = sqlRouter.createRouteContext(logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
+        routedDataSourceNames = actual.getActualDataSourceNames().iterator();
+        assertThat(routedDataSourceNames.next(), is(READ_DATASOURCE));
+    }
+    
+    @Test
+    public void assertCreateRouteContextToWriteDataSourceWithQueryConsistent() 
{
+        ReadwriteSplittingRule rule = new ReadwriteSplittingRule(new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(
+                new 
ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, "", 
WRITE_DATASOURCE, Collections.singletonList(READ_DATASOURCE), null, true)), 
Collections.emptyMap()));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
+        MySQLInsertStatement insertStatement = 
mock(MySQLInsertStatement.class);
+        
when(sqlStatementContext.getSqlStatement()).thenReturn(insertStatement);
+        LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
+        RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
+        Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
+        assertThat(routedDataSourceNames.next(), is(WRITE_DATASOURCE));
+        MySQLSelectStatement selectStatement = 
mock(MySQLSelectStatement.class);
+        
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
+        
when(selectStatement.getLock()).thenReturn(Optional.of(mock(LockSegment.class)));
+        logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
+        actual = sqlRouter.createRouteContext(logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
+        routedDataSourceNames = actual.getActualDataSourceNames().iterator();
+        assertThat(routedDataSourceNames.next(), is(WRITE_DATASOURCE));
+    }
+    
     private RouteContext mockRouteContext() {
         RouteContext result = new RouteContext();
         RouteUnit routeUnit = new RouteUnit(new RouteMapper(DATASOURCE_NAME, 
DATASOURCE_NAME), Collections.singletonList(new RouteMapper("table", 
"table_0")));
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
index a31878e..b448bec 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
@@ -34,27 +34,29 @@ import static org.junit.Assert.assertThat;
 public final class ReadwriteSplittingDataSourceRuleTest {
     
     private final ReadwriteSplittingDataSourceRule 
readwriteSplittingDataSourceRule = new ReadwriteSplittingDataSourceRule(
-            new ReadwriteSplittingDataSourceRuleConfiguration("test_pr", "", 
"write_ds", Arrays.asList("read_ds_0", "read_ds_1"), "random"), new 
RandomReplicaLoadBalanceAlgorithm());
+            new ReadwriteSplittingDataSourceRuleConfiguration("test_pr", "", 
"write_ds", Arrays.asList("read_ds_0", "read_ds_1"), "random", false), new 
RandomReplicaLoadBalanceAlgorithm());
     
     @Test(expected = IllegalArgumentException.class)
     public void assertNewReadwriteSplittingDataSourceRuleWithoutName() {
-        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("", "", "write_ds", 
Collections.singletonList("read_ds"), null), 
+        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("", "", "write_ds", 
Collections.singletonList("read_ds"), null, false), 
                 new RoundRobinReplicaLoadBalanceAlgorithm());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void 
assertNewReadwriteSplittingDataSourceRuleWithoutPrimaryDataSourceName() {
-        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "", 
Collections.singletonList("read_ds"), null), new 
RoundRobinReplicaLoadBalanceAlgorithm());
+        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "", 
Collections.singletonList("read_ds"), null, false), 
+                new RoundRobinReplicaLoadBalanceAlgorithm());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void 
assertNewReadwriteSplittingDataSourceRuleWithNullReadDataSourceName() {
-        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "write_ds", null, 
null), new RoundRobinReplicaLoadBalanceAlgorithm());
+        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "write_ds", null, null, 
false), new RoundRobinReplicaLoadBalanceAlgorithm());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void 
assertNewReadwriteSplittingDataSourceRuleWithEmptyReadDataSourceName() {
-        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "write_ds", 
Collections.emptyList(), null), new RoundRobinReplicaLoadBalanceAlgorithm());
+        new ReadwriteSplittingDataSourceRule(new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "write_ds", 
Collections.emptyList(), null, false), 
+                new RoundRobinReplicaLoadBalanceAlgorithm());
     }
     
     @Test
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index 5dce2a0..76db76a 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -32,6 +32,7 @@ import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
@@ -56,7 +57,7 @@ public final class ReadwriteSplittingRuleTest {
     
     private ReadwriteSplittingRule createReadwriteSplittingRule() {
         ReadwriteSplittingDataSourceRuleConfiguration config = 
-                new ReadwriteSplittingDataSourceRuleConfiguration("test_pr", 
"", "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), "random");
+                new ReadwriteSplittingDataSourceRuleConfiguration("test_pr", 
"", "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), "random", false);
         return new ReadwriteSplittingRule(new 
ReadwriteSplittingRuleConfiguration(
                 Collections.singleton(config), ImmutableMap.of("random", new 
ShardingSphereAlgorithmConfiguration("RANDOM", new Properties()))));
     }
@@ -66,6 +67,7 @@ public final class ReadwriteSplittingRuleTest {
         assertThat(actual.getWriteDataSourceName(), is("write_ds"));
         assertThat(actual.getReadDataSourceNames(), 
is(Arrays.asList("read_ds_0", "read_ds_1")));
         assertThat(actual.getLoadBalancer().getType(), is("RANDOM"));
+        assertFalse(actual.isQueryConsistent());
     }
     
     @Test
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java
index 82d0b6a..7fdb746 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java
@@ -47,7 +47,7 @@ public final class 
AlgorithmProvidedReadwriteSplittingRuleBuilderTest {
     public void assertBuild() {
         AlgorithmProvidedReadwriteSplittingRuleConfiguration 
algorithmProvidedRuleConfig = 
mock(AlgorithmProvidedReadwriteSplittingRuleConfiguration.class);
         ReadwriteSplittingDataSourceRuleConfiguration ruleConfig = new 
ReadwriteSplittingDataSourceRuleConfiguration(
-                "name", "pr_ds", "writeDataSourceName", 
Collections.singletonList("name"), "loadBalancerName");
+                "name", "pr_ds", "writeDataSourceName", 
Collections.singletonList("name"), "loadBalancerName", false);
         
when(algorithmProvidedRuleConfig.getDataSources()).thenReturn(Collections.singletonList(ruleConfig));
         SchemaRuleBuilder builder = OrderedSPIRegistry.getRegisteredServices(
                 SchemaRuleBuilder.class, 
Collections.singletonList(algorithmProvidedRuleConfig)).get(algorithmProvidedRuleConfig);
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
index c9a77ab..3a485d0 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
@@ -47,7 +47,7 @@ public final class ReadwriteSplittingRuleBuilderTest {
     public void assertBuild() {
         ReadwriteSplittingRuleConfiguration ruleConfig = 
mock(ReadwriteSplittingRuleConfiguration.class);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = 
new ReadwriteSplittingDataSourceRuleConfiguration(
-                "name", "pr_ds", "writeDataSourceName", 
Collections.singletonList("name"), "loadBalancerName");
+                "name", "pr_ds", "writeDataSourceName", 
Collections.singletonList("name"), "loadBalancerName", false);
         
when(ruleConfig.getDataSources()).thenReturn(Collections.singletonList(dataSourceRuleConfig));
         SchemaRuleBuilder builder = 
OrderedSPIRegistry.getRegisteredServices(SchemaRuleBuilder.class, 
Collections.singletonList(ruleConfig)).get(ruleConfig);
         assertThat(builder.build(new SchemaRulesBuilderMaterials("", 
Collections.emptyList(), mock(DatabaseType.class), 
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
index 2200941..1549f57 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
@@ -30,6 +30,7 @@ import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -51,6 +52,7 @@ public final class 
ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
         assertThat(actual.getLoadBalancers().keySet(), 
is(Collections.singleton("name")));
         assertNotNull(actual.getLoadBalancers().get("name"));
         assertThat(actual.getLoadBalancers().get("name").getType(), 
is("RANDOM"));
+        assertFalse(actual.getDataSources().get("name").isQueryConsistent());
     }
     
     @Test
@@ -65,6 +67,7 @@ public final class 
ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
         assertThat(ruleConfig.getWriteDataSourceName(), 
is("writeDataSourceName"));
         assertThat(ruleConfig.getLoadBalancerName(), is("loadBalancerName"));
         assertThat(ruleConfig.getReadDataSourceNames(), 
is(Collections.singletonList("readDataSourceName")));
+        assertFalse(ruleConfig.isQueryConsistent());
         assertThat(actual.getLoadBalanceAlgorithms(), 
is(Collections.emptyMap()));
     }
     
@@ -85,7 +88,7 @@ public final class 
ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
     
     private YamlReadwriteSplittingRuleConfiguration 
createYamlReadwriteSplittingRuleConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration ruleConfig = new 
ReadwriteSplittingDataSourceRuleConfiguration("name", "", "writeDataSourceName",
-                Collections.singletonList("readDataSourceName"), 
"loadBalancerName");
+                Collections.singletonList("readDataSourceName"), 
"loadBalancerName", false);
         return swapper.swapToYamlConfiguration(
                 new 
AlgorithmProvidedReadwriteSplittingRuleConfiguration(Collections.singletonList(ruleConfig),
 ImmutableMap.of("name", new RandomReplicaLoadBalanceAlgorithm())));
     }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java
index 97ffbf9..0e69cba 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java
@@ -35,6 +35,7 @@ import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -50,22 +51,35 @@ public final class 
ReadwriteSplittingRuleConfigurationYamlSwapperTest {
     @Test
     public void assertSwapToYamlWithLoadBalanceAlgorithm() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = 
-                new ReadwriteSplittingDataSourceRuleConfiguration("ds", "", 
"write", Collections.singletonList("read"), "roundRobin");
+                new ReadwriteSplittingDataSourceRuleConfiguration("ds", "", 
"write", Collections.singletonList("read"), "roundRobin", false);
         YamlReadwriteSplittingRuleConfiguration actual = 
getReadwriteSplittingRuleConfigurationYamlSwapper().swapToYamlConfiguration(new 
ReadwriteSplittingRuleConfiguration(
                 Collections.singleton(dataSourceConfig), 
ImmutableMap.of("roundRobin", new 
ShardingSphereAlgorithmConfiguration("ROUND_ROBIN", new Properties()))));
         assertThat(actual.getDataSources().get("ds").getWriteDataSourceName(), 
is("write"));
         assertThat(actual.getDataSources().get("ds").getReadDataSourceNames(), 
is(Collections.singletonList("read")));
         assertThat(actual.getDataSources().get("ds").getLoadBalancerName(), 
is("roundRobin"));
+        assertFalse(actual.getDataSources().get("ds").isQueryConsistent());
     }
     
     @Test
     public void assertSwapToYamlWithoutLoadBalanceAlgorithm() {
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "write", 
Collections.singletonList("read"), null);
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "write", 
Collections.singletonList("read"), null, false);
         YamlReadwriteSplittingRuleConfiguration actual = 
getReadwriteSplittingRuleConfigurationYamlSwapper().swapToYamlConfiguration(
                 new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), 
Collections.emptyMap()));
         assertThat(actual.getDataSources().get("ds").getWriteDataSourceName(), 
is("write"));
         assertThat(actual.getDataSources().get("ds").getReadDataSourceNames(), 
is(Collections.singletonList("read")));
         assertNull(actual.getDataSources().get("ds").getLoadBalancerName());
+        assertFalse(actual.getDataSources().get("ds").isQueryConsistent());
+    }
+    
+    @Test
+    public void assertSwapToYamlWithQueryConsistent() {
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new 
ReadwriteSplittingDataSourceRuleConfiguration("ds", "", "write", 
Collections.singletonList("read"), null, true);
+        YamlReadwriteSplittingRuleConfiguration actual = 
getReadwriteSplittingRuleConfigurationYamlSwapper().swapToYamlConfiguration(
+                new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), 
Collections.emptyMap()));
+        assertThat(actual.getDataSources().get("ds").getWriteDataSourceName(), 
is("write"));
+        assertThat(actual.getDataSources().get("ds").getReadDataSourceNames(), 
is(Collections.singletonList("read")));
+        assertNull(actual.getDataSources().get("ds").getLoadBalancerName());
+        assertTrue(actual.getDataSources().get("ds").isQueryConsistent());
     }
     
     @Test
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/r
 [...]
index 6ac11f4..5ef4891 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
@@ -56,8 +56,8 @@ public final class ReadwriteSplittingRuleStatementConverter {
     
     private static ReadwriteSplittingDataSourceRuleConfiguration 
createDataSourceRuleConfiguration(final String name, final String 
loadBalancerName, final ReadwriteSplittingRuleSegment ruleSegment) {
         return Strings.isNullOrEmpty(ruleSegment.getAutoAwareResource())
-                ? new ReadwriteSplittingDataSourceRuleConfiguration(name, 
null, ruleSegment.getWriteDataSource(), new 
LinkedList<>(ruleSegment.getReadDataSources()), loadBalancerName)
-                : new ReadwriteSplittingDataSourceRuleConfiguration(name, 
ruleSegment.getAutoAwareResource(), null, Collections.emptyList(), 
loadBalancerName);
+                ? new ReadwriteSplittingDataSourceRuleConfiguration(name, 
null, ruleSegment.getWriteDataSource(), new 
LinkedList<>(ruleSegment.getReadDataSources()), loadBalancerName, false)
+                : new ReadwriteSplittingDataSourceRuleConfiguration(name, 
ruleSegment.getAutoAwareResource(), null, Collections.emptyList(), 
loadBalancerName, false);
     }
     
     private static ShardingSphereAlgorithmConfiguration 
createLoadBalancer(final ReadwriteSplittingRuleSegment ruleSegment) {
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSetTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readw
 [...]
index 2488dda..1d65bff 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSetTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSetTest.java
@@ -57,7 +57,7 @@ public final class ReadwriteSplittingRuleQueryResultSetTest {
     
     private RuleConfiguration createRuleConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
-                new ReadwriteSplittingDataSourceRuleConfiguration("pr_ds", 
"ms_group", "ds_primary", Arrays.asList("ds_slave_0", "ds_slave_1"), "test");
+                new ReadwriteSplittingDataSourceRuleConfiguration("pr_ds", 
"ms_group", "ds_primary", Arrays.asList("ds_slave_0", "ds_slave_1"), "test", 
false);
         Properties props = new Properties();
         props.setProperty("read_weight", "2:1");
         ShardingSphereAlgorithmConfiguration 
shardingSphereAlgorithmConfiguration = new 
ShardingSphereAlgorithmConfiguration("random", props);
@@ -79,7 +79,7 @@ public final class ReadwriteSplittingRuleQueryResultSetTest {
     
     private RuleConfiguration createRuleConfigurationWithoutLoadBalancer() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
-                new ReadwriteSplittingDataSourceRuleConfiguration("pr_ds", 
null, "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), null);
+                new ReadwriteSplittingDataSourceRuleConfiguration("pr_ds", 
null, "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), null, false);
         return new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceRuleConfig),
 null);
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdaterTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphe
 [...]
index a44b4c5..b57432a 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdaterTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdaterTest.java
@@ -85,7 +85,7 @@ public final class 
AlterReadwriteSplittingRuleStatementUpdaterTest {
     
     private ReadwriteSplittingRuleConfiguration 
createCurrentRuleConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = 
-                new 
ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, "ds_write", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST");
+                new 
ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, "ds_write", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST", false);
         return new ReadwriteSplittingRuleConfiguration(new 
LinkedList<>(Collections.singleton(dataSourceRuleConfig)), 
Collections.emptyMap());
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdaterTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsph
 [...]
index 4fe2346..b36f995 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdaterTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdaterTest.java
@@ -81,7 +81,7 @@ public final class 
CreateReadwriteSplittingRuleStatementUpdaterTest {
     
     private ReadwriteSplittingRuleConfiguration getCurrentRuleConfig() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig
-                = new 
ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "", "write_ds", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST");
+                = new 
ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "", "write_ds", 
Arrays.asList("read_ds_0", "read_ds_1"), "TEST", false);
         return new ReadwriteSplittingRuleConfiguration(new 
LinkedList<>(Collections.singleton(dataSourceRuleConfig)), 
Collections.emptyMap());
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingspher
 [...]
index 4d86420..cbe883b8 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
@@ -80,15 +80,15 @@ public final class 
DropReadwriteSplittingRuleStatementUpdaterTest {
     private ReadwriteSplittingRuleConfiguration 
createCurrentRuleConfiguration() {
         Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = new 
HashMap<>(1, 1);
         loadBalancers.put("readwrite_ds", new 
ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = 
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, null, 
null, "TEST");
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = 
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, null, 
null, "TEST", false);
         return new ReadwriteSplittingRuleConfiguration(new 
LinkedList<>(Collections.singleton(dataSourceRuleConfig)), loadBalancers);
     }
     
     private ReadwriteSplittingRuleConfiguration 
createMultipleCurrentRuleConfigurations() {
         Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = new 
HashMap<>(1, 1);
         loadBalancers.put("readwrite_ds", new 
ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = 
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, null, 
null, "TEST");
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = 
new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null, null, 
null, "TEST", false);
         return new ReadwriteSplittingRuleConfiguration(new 
LinkedList<>(Arrays.asList(dataSourceRuleConfig, 
-                new 
ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds_another", null, 
null, null, "TEST"))), loadBalancers);
+                new 
ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds_another", null, 
null, null, "TEST", false))), loadBalancers);
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/boot/ReadwriteSplittingSpringBootStarterTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwrites
 [...]
index d2e143b..b4d349e 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/boot/ReadwriteSplittingSpringBootStarterTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/boot/ReadwriteSplittingSpringBootStarterTest.java
@@ -30,6 +30,7 @@ import 
org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import javax.annotation.Resource;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
@@ -59,6 +60,7 @@ public class ReadwriteSplittingSpringBootStarterTest {
         assertThat(dataSourceRuleConfig.getWriteDataSourceName(), 
is("write_ds"));
         assertThat(dataSourceRuleConfig.getLoadBalancerName(), is("random"));
         assertThat(dataSourceRuleConfig.getReadDataSourceNames().size(), 
is(2));
+        assertFalse(dataSourceRuleConfig.isQueryConsistent());
         assertTrue(config.getDataSources().contains(dataSourceRuleConfig));
         assertThat(config.getLoadBalanceAlgorithms().size(), is(1));
         assertTrue(config.getLoadBalanceAlgorithms().containsKey("random"));
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/parser/ReadwriteSplittingRuleBeanDefinitionParser.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/r
 [...]
index 7e38783..a111a77 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/parser/ReadwriteSplittingRuleBeanDefinitionParser.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/parser/ReadwriteSplittingRuleBeanDefinitionParser.java
@@ -64,6 +64,7 @@ public final class ReadwriteSplittingRuleBeanDefinitionParser 
extends AbstractBe
         
factory.addConstructorArgValue(element.getAttribute(ReadwriteSplittingRuleBeanDefinitionTag.WRITE_DATA_SOURCE_NAME_ATTRIBUTE));
         factory.addConstructorArgValue(parseReadDataSourcesRef(element));
         
factory.addConstructorArgValue(element.getAttribute(ReadwriteSplittingRuleBeanDefinitionTag.LOAD_BALANCE_ALGORITHM_REF_ATTRIBUTE));
+        
factory.addConstructorArgValue(element.getAttribute(ReadwriteSplittingRuleBeanDefinitionTag.QUERY_CONSISTENT));
         return factory.getBeanDefinition();
     }
     
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwri
 [...]
index e0b15e6..fe3be7f 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
@@ -39,4 +39,6 @@ public final class ReadwriteSplittingRuleBeanDefinitionTag {
     public static final String READ_DATA_SOURCE_NAMES_ATTRIBUTE = 
"read-data-source-names";
     
     public static final String LOAD_BALANCE_ALGORITHM_REF_ATTRIBUTE = 
"load-balance-algorithm-ref";
+    
+    public static final String QUERY_CONSISTENT = "query-consistent";
 }
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd
index 9fddc89..8dfaf48 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd
@@ -35,10 +35,11 @@
     <xsd:element name="data-source-rule">
         <xsd:complexType>
             <xsd:attribute name="id" type="xsd:string" use="required" />
-            <xsd:attribute name="auto-aware-data-source-name" 
type="xsd:string"/>
+            <xsd:attribute name="auto-aware-data-source-name" 
type="xsd:string" />
             <xsd:attribute name="write-data-source-name" type="xsd:string" 
use="required" />
             <xsd:attribute name="read-data-source-names" type="xsd:string" 
use="required" />
             <xsd:attribute name="load-balance-algorithm-ref" type="xsd:string" 
/>
+            <xsd:attribute name="query-consistent" type="xsd:boolean" 
default="false" />
         </xsd:complexType>
     </xsd:element>
     
diff --git 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/ReadwriteSplittingSpringNamespaceTest.java
 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritespli
 [...]
index 59e3c3a..30fd131 100644
--- 
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/ReadwriteSplittingSpringNamespaceTest.java
+++ 
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/ReadwriteSplittingSpringNamespaceTest.java
@@ -31,6 +31,7 @@ import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 
 @ContextConfiguration(locations = 
"classpath:META-INF/spring/readwrite-splitting-application-context.xml")
@@ -67,6 +68,7 @@ public final class ReadwriteSplittingSpringNamespaceTest 
extends AbstractJUnit4S
         assertThat(dataSourceRuleConfig.getWriteDataSourceName(), 
is("write_ds"));
         assertThat(dataSourceRuleConfig.getReadDataSourceNames(), 
is(Arrays.asList("read_ds_0", "read_ds_1")));
         assertThat(dataSourceRuleConfig.getLoadBalancerName(), is(""));
+        assertFalse(dataSourceRuleConfig.isQueryConsistent());
     }
     
     @Test
@@ -81,5 +83,6 @@ public final class ReadwriteSplittingSpringNamespaceTest 
extends AbstractJUnit4S
         assertThat(dataSourceRuleConfig.getWriteDataSourceName(), 
is("write_ds"));
         assertThat(dataSourceRuleConfig.getReadDataSourceNames(), 
is(Arrays.asList("read_ds_0", "read_ds_1")));
         assertThat(dataSourceRuleConfig.getLoadBalancerName(), 
is("randomLoadbalancer"));
+        assertFalse(dataSourceRuleConfig.isQueryConsistent());
     }
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
index 30154b4..daa96f9 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
@@ -52,6 +52,7 @@ import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -120,6 +121,7 @@ public class SpringBootStarterTest {
         assertThat(dataSourceRule.getReadDataSourceNames(), 
is(Arrays.asList("read_ds_0", "read_ds_1")));
         assertThat(dataSourceRule.getLoadBalancer(), 
instanceOf(RandomReplicaLoadBalanceAlgorithm.class));
         assertThat(dataSourceRule.getDataSourceMapper(), 
is(Collections.singletonMap("pr_ds", Arrays.asList("write_ds", "read_ds_0", 
"read_ds_1"))));
+        assertFalse(dataSourceRule.isQueryConsistent());
     }
     
     private void assertEncryptRule(final EncryptRule rule) {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/SpringNamespaceWithReadwriteSplittingForClusterTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/SpringNamespaceWithReadwriteSplittingForClusterTest.java
index 31be041..9950f7a 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/SpringNamespaceWithReadwriteSplittingForClusterTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/SpringNamespaceWithReadwriteSplittingForClusterTest.java
@@ -38,6 +38,7 @@ import 
org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -64,6 +65,7 @@ public final class 
SpringNamespaceWithReadwriteSplittingForClusterTest extends A
         assertThat(dataSourceRule.get().getWriteDataSourceName(), 
is("dbtbl_write_0"));
         
assertTrue(dataSourceRule.get().getReadDataSourceNames().contains("dbtbl_0_read_0"));
         
assertTrue(dataSourceRule.get().getReadDataSourceNames().contains("dbtbl_0_read_1"));
+        assertFalse(dataSourceRule.get().isQueryConsistent());
     }
     
     @Test

Reply via email to