diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java index ffeb8e3b00df8..28d7172ee6047 100644 --- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java +++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/InlineShardingAlgorithm.java @@ -39,6 +39,8 @@ public final class InlineShardingAlgorithm implements StandardShardingAlgorithm< private static final String ALLOW_RANGE_QUERY_KEY = "allow-range-query-with-inline-sharding"; + private String algorithmExpression; + private boolean allowRangeQuery; @Getter @@ -47,16 +49,14 @@ public final class InlineShardingAlgorithm implements StandardShardingAlgorithm< @Override public void init() { + algorithmExpression = getAlgorithmExpression(); allowRangeQuery = isAllowRangeQuery(); } - private Closure createClosure() { + private String getAlgorithmExpression() { String expression = props.getProperty(ALGORITHM_EXPRESSION_KEY); Preconditions.checkNotNull(expression, "Inline sharding algorithm expression cannot be null."); - String algorithmExpression = InlineExpressionParser.handlePlaceHolder(expression.trim()); - Closure result = new InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new Expando(), null, null); - result.setResolveStrategy(Closure.DELEGATE_ONLY); - return result; + return InlineExpressionParser.handlePlaceHolder(expression.trim()); } private boolean isAllowRangeQuery() { @@ -78,6 +78,12 @@ public Collection doSharding(final Collection availableTargetNam throw new UnsupportedOperationException("Since the property of `" + ALLOW_RANGE_QUERY_KEY + "` is false, inline sharding algorithm can not tackle with range query."); } + private Closure createClosure() { + Closure result = new InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new Expando(), null, null); + result.setResolveStrategy(Closure.DELEGATE_ONLY); + return result; + } + @Override public String getType() { return "INLINE";