提交 2b4b958f 编写于 作者: G gaohongtao 提交者: gaohongtao

remove init method from IdGenerator

上级 e65fe031
...@@ -27,6 +27,7 @@ import com.dangdang.ddframe.rdb.sharding.api.strategy.database.SingleKeyDatabase ...@@ -27,6 +27,7 @@ import com.dangdang.ddframe.rdb.sharding.api.strategy.database.SingleKeyDatabase
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.MultipleKeysTableShardingAlgorithm; import com.dangdang.ddframe.rdb.sharding.api.strategy.table.MultipleKeysTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.SingleKeyTableShardingAlgorithm; import com.dangdang.ddframe.rdb.sharding.api.strategy.table.SingleKeyTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy; import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.AutoIncrementColumnConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.StrategyConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.StrategyConfig;
...@@ -121,11 +122,11 @@ public final class ShardingRuleBuilder { ...@@ -121,11 +122,11 @@ public final class ShardingRuleBuilder {
} }
private void buildAutoIncrementColumn(final TableRule.TableRuleBuilder tableRuleBuilder, final TableRuleConfig tableRuleConfig) { private void buildAutoIncrementColumn(final TableRule.TableRuleBuilder tableRuleBuilder, final TableRuleConfig tableRuleConfig) {
for (Entry<String, String> each : tableRuleConfig.getAutoIncrementColumns().entrySet()) { for (AutoIncrementColumnConfig each : tableRuleConfig.getAutoIncrementColumns()) {
if (null == each.getValue()) { if (Strings.isNullOrEmpty(each.getColumnIdGeneratorClass())) {
tableRuleBuilder.autoIncrementColumns(each.getKey()); tableRuleBuilder.autoIncrementColumns(each.getColumnName());
} else { } else {
tableRuleBuilder.autoIncrementColumns(each.getKey(), loadClass(each.getValue(), IdGenerator.class)); tableRuleBuilder.autoIncrementColumns(each.getColumnName(), loadClass(each.getColumnIdGeneratorClass(), IdGenerator.class));
} }
} }
} }
...@@ -194,7 +195,7 @@ public final class ShardingRuleBuilder { ...@@ -194,7 +195,7 @@ public final class ShardingRuleBuilder {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private <T> Class<? extends T> loadClass(final String className, final Class<T> superClass) { private <T> Class<? extends T> loadClass(final String className, final Class<T> superClass) {
try { try {
return (Class<? extends T>) Class.forName(className); return (Class<? extends T>) superClass.getClassLoader().loadClass(className);
} catch (final ClassNotFoundException ex) { } catch (final ClassNotFoundException ex) {
throw new IllegalArgumentException(ex); throw new IllegalArgumentException(ex);
} }
......
/*
* Copyright 1999-2015 dangdang.com.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/
package com.dangdang.ddframe.rdb.sharding.config.common.api.config;
import lombok.Getter;
import lombok.Setter;
/**
* 自增列配置.
*
* @author gaohongtao
*/
@Getter
@Setter
public class AutoIncrementColumnConfig {
private String columnName;
private String columnIdGeneratorClass;
}
...@@ -20,8 +20,8 @@ package com.dangdang.ddframe.rdb.sharding.config.common.api.config; ...@@ -20,8 +20,8 @@ package com.dangdang.ddframe.rdb.sharding.config.common.api.config;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.HashMap; import java.util.ArrayList;
import java.util.Map; import java.util.List;
/** /**
* 表规则配置. * 表规则配置.
...@@ -42,5 +42,5 @@ public class TableRuleConfig { ...@@ -42,5 +42,5 @@ public class TableRuleConfig {
private StrategyConfig tableStrategy; private StrategyConfig tableStrategy;
private Map<String, String> autoIncrementColumns = new HashMap<>(); private List<AutoIncrementColumnConfig> autoIncrementColumns = new ArrayList<>();
} }
...@@ -21,16 +21,19 @@ import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule; ...@@ -21,16 +21,19 @@ import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataNode; import com.dangdang.ddframe.rdb.sharding.api.rule.DataNode;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule; import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule; import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.AutoIncrementColumnConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.StrategyConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.StrategyConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.TableRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.TableRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.fixture.DecrementIdGenerator;
import com.dangdang.ddframe.rdb.sharding.config.common.internal.fixture.MultiAlgorithm; import com.dangdang.ddframe.rdb.sharding.config.common.internal.fixture.MultiAlgorithm;
import com.dangdang.ddframe.rdb.sharding.config.common.internal.fixture.SingleAlgorithm; import com.dangdang.ddframe.rdb.sharding.config.common.internal.fixture.SingleAlgorithm;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import org.junit.Test; import org.junit.Test;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -160,8 +163,13 @@ public final class ShardingRuleBuilderTest { ...@@ -160,8 +163,13 @@ public final class ShardingRuleBuilderTest {
result.setTableStrategy(getTableStrategyConfigForExpression()); result.setTableStrategy(getTableStrategyConfigForExpression());
Map<String, String> autoIncrementColumnMap = new HashMap<>(); Map<String, String> autoIncrementColumnMap = new HashMap<>();
autoIncrementColumnMap.put("order_id", null); autoIncrementColumnMap.put("order_id", null);
AutoIncrementColumnConfig orderIdConfig = new AutoIncrementColumnConfig();
orderIdConfig.setColumnName("order_id");
autoIncrementColumnMap.put("order_item_id", "com.dangdang.ddframe.rdb.sharding.config.common.fixture.DecrementIdGenerator"); autoIncrementColumnMap.put("order_item_id", "com.dangdang.ddframe.rdb.sharding.config.common.fixture.DecrementIdGenerator");
result.setAutoIncrementColumns(autoIncrementColumnMap); AutoIncrementColumnConfig orderItemIdConfig = new AutoIncrementColumnConfig();
orderItemIdConfig.setColumnName("order_item_id");
orderItemIdConfig.setColumnIdGeneratorClass(DecrementIdGenerator.class.getName());
result.setAutoIncrementColumns(Arrays.asList(orderIdConfig, orderItemIdConfig));
return result; return result;
} }
......
...@@ -28,9 +28,4 @@ abstract class AbstractNumberIdGenerator implements IdGenerator { ...@@ -28,9 +28,4 @@ abstract class AbstractNumberIdGenerator implements IdGenerator {
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
private final AtomicInteger sequence = new AtomicInteger(100); private final AtomicInteger sequence = new AtomicInteger(100);
@Override
public void initContext(final String tableName, final String columnName) {
}
} }
...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.common.fixture; ...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.common.fixture;
public class DecrementIdGenerator extends AbstractNumberIdGenerator { public class DecrementIdGenerator extends AbstractNumberIdGenerator {
@Override @Override
public Object generateId() { public Number generateId() {
return getSequence().decrementAndGet(); return getSequence().decrementAndGet();
} }
} }
...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.common.fixture; ...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.common.fixture;
public class IncrementIdGenerator extends AbstractNumberIdGenerator { public class IncrementIdGenerator extends AbstractNumberIdGenerator {
@Override @Override
public Object generateId() { public Number generateId() {
return getSequence().incrementAndGet(); return getSequence().incrementAndGet();
} }
} }
...@@ -17,13 +17,16 @@ ...@@ -17,13 +17,16 @@
package com.dangdang.ddframe.rdb.sharding.spring.namespace.parser; package com.dangdang.ddframe.rdb.sharding.spring.namespace.parser;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.AutoIncrementColumnConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.BindingTableRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.TableRuleConfig; import com.dangdang.ddframe.rdb.sharding.config.common.api.config.TableRuleConfig;
import com.dangdang.ddframe.rdb.sharding.spring.datasource.SpringShardingDataSource; import com.dangdang.ddframe.rdb.sharding.spring.datasource.SpringShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.spring.namespace.constants.ShardingJdbcDataSourceBeanDefinitionParserTag; import com.dangdang.ddframe.rdb.sharding.spring.namespace.constants.ShardingJdbcDataSourceBeanDefinitionParserTag;
import com.google.common.base.Function;
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionBuilder;
...@@ -128,12 +131,15 @@ public class ShardingJdbcDataSourceBeanDefinitionParser extends AbstractBeanDefi ...@@ -128,12 +131,15 @@ public class ShardingJdbcDataSourceBeanDefinitionParser extends AbstractBeanDefi
if (null == autoIncrementColumns || autoIncrementColumns.isEmpty()) { if (null == autoIncrementColumns || autoIncrementColumns.isEmpty()) {
return factory.getBeanDefinition(); return factory.getBeanDefinition();
} }
Map<String, String> autoIncrementColumnMap = new ManagedMap<>(autoIncrementColumns.size()); factory.addPropertyValue("autoIncrementColumns", Lists.transform(autoIncrementColumns, new Function<Element, AutoIncrementColumnConfig>() {
for (Element each : autoIncrementColumns) { @Override
autoIncrementColumnMap.put(each.getAttribute(ShardingJdbcDataSourceBeanDefinitionParserTag.COLUMN_NAME), public AutoIncrementColumnConfig apply(final Element input) {
Strings.emptyToNull(each.getAttribute(ShardingJdbcDataSourceBeanDefinitionParserTag.COLUMN_ID_GENERATOR_CLASS))); AutoIncrementColumnConfig result = new AutoIncrementColumnConfig();
result.setColumnName(input.getAttribute(ShardingJdbcDataSourceBeanDefinitionParserTag.COLUMN_NAME));
result.setColumnIdGeneratorClass(input.getAttribute(ShardingJdbcDataSourceBeanDefinitionParserTag.COLUMN_ID_GENERATOR_CLASS));
return result;
} }
factory.addPropertyValue("autoIncrementColumns", autoIncrementColumnMap); }));
return factory.getBeanDefinition(); return factory.getBeanDefinition();
} }
......
...@@ -27,10 +27,4 @@ abstract class AbstractNumberIdGenerator implements IdGenerator { ...@@ -27,10 +27,4 @@ abstract class AbstractNumberIdGenerator implements IdGenerator {
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
private final AtomicInteger sequence = new AtomicInteger(100); private final AtomicInteger sequence = new AtomicInteger(100);
@Override
public void initContext(final String tableName, final String columnName) {
}
} }
...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.spring.fixture; ...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.spring.fixture;
public class DecrementIdGenerator extends AbstractNumberIdGenerator { public class DecrementIdGenerator extends AbstractNumberIdGenerator {
@Override @Override
public Object generateId() { public Number generateId() {
return getSequence().decrementAndGet(); return getSequence().decrementAndGet();
} }
} }
...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.spring.fixture; ...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.spring.fixture;
public class IncrementIdGenerator extends AbstractNumberIdGenerator { public class IncrementIdGenerator extends AbstractNumberIdGenerator {
@Override @Override
public Object generateId() { public Number generateId() {
return getSequence().incrementAndGet(); return getSequence().incrementAndGet();
} }
} }
...@@ -28,9 +28,4 @@ abstract class AbstractNumberIdGenerator implements IdGenerator { ...@@ -28,9 +28,4 @@ abstract class AbstractNumberIdGenerator implements IdGenerator {
@Getter(AccessLevel.PACKAGE) @Getter(AccessLevel.PACKAGE)
private final AtomicInteger sequence = new AtomicInteger(100); private final AtomicInteger sequence = new AtomicInteger(100);
@Override
public void initContext(final String tableName, final String columnName) {
}
} }
...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.yaml.fixture; ...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.yaml.fixture;
public class DecrementIdGenerator extends AbstractNumberIdGenerator { public class DecrementIdGenerator extends AbstractNumberIdGenerator {
@Override @Override
public Object generateId() { public Number generateId() {
return getSequence().decrementAndGet(); return getSequence().decrementAndGet();
} }
} }
...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.yaml.fixture; ...@@ -20,7 +20,7 @@ package com.dangdang.ddframe.rdb.sharding.config.yaml.fixture;
public class IncrementIdGenerator extends AbstractNumberIdGenerator { public class IncrementIdGenerator extends AbstractNumberIdGenerator {
@Override @Override
public Object generateId() { public Number generateId() {
return getSequence().incrementAndGet(); return getSequence().incrementAndGet();
} }
} }
...@@ -24,7 +24,7 @@ tables: ...@@ -24,7 +24,7 @@ tables:
t_order: t_order:
actualTables: t_order_${0..1} actualTables: t_order_${0..1}
autoIncrementColumns: autoIncrementColumns:
order_id: - columnName: order_id
databaseStrategy: &db001 databaseStrategy: &db001
shardingColumns: order_id shardingColumns: order_id
algorithmClassName: com.dangdang.ddframe.rdb.sharding.config.yaml.algorithm.SingleAlgorithm algorithmClassName: com.dangdang.ddframe.rdb.sharding.config.yaml.algorithm.SingleAlgorithm
...@@ -35,7 +35,8 @@ tables: ...@@ -35,7 +35,8 @@ tables:
t_order_item: t_order_item:
actualTables: t_order_item_${0..1} actualTables: t_order_item_${0..1}
autoIncrementColumns: autoIncrementColumns:
order_item_id: com.dangdang.ddframe.rdb.sharding.config.yaml.fixture.DecrementIdGenerator - columnName: order_item_id
columnIdGeneratorClass: com.dangdang.ddframe.rdb.sharding.config.yaml.fixture.DecrementIdGenerator
#绑定表中其余的表的策略与第一张表的策略相同 #绑定表中其余的表的策略与第一张表的策略相同
databaseStrategy: *db001 databaseStrategy: *db001
tableStrategy: *table001 tableStrategy: *table001
......
...@@ -203,7 +203,8 @@ public final class TableRule { ...@@ -203,7 +203,8 @@ public final class TableRule {
void fillIdGenerator(final Class<? extends IdGenerator> idGeneratorClass) { void fillIdGenerator(final Class<? extends IdGenerator> idGeneratorClass) {
for (Map.Entry<String, IdGenerator> each : autoIncrementColumnMap.entrySet()) { for (Map.Entry<String, IdGenerator> each : autoIncrementColumnMap.entrySet()) {
if (null == each.getValue()) { if (null == each.getValue()) {
each.setValue(TableRuleBuilder.instanceIdGenerator(idGeneratorClass)); IdGenerator idGenerator = TableRuleBuilder.instanceIdGenerator(idGeneratorClass);
each.setValue(idGenerator);
} }
} }
} }
...@@ -215,9 +216,8 @@ public final class TableRule { ...@@ -215,9 +216,8 @@ public final class TableRule {
* @return 生成的id * @return 生成的id
*/ */
public Object generateId(final String columnName) { public Object generateId(final String columnName) {
Object result = autoIncrementColumnMap.get(columnName).generateId(); Number result = autoIncrementColumnMap.get(columnName).generateId();
Preconditions.checkNotNull(result); Preconditions.checkNotNull(result);
Preconditions.checkState(result instanceof Number || result instanceof String, "id %s(%s) should be Number or String", result.toString(), result.getClass().getName());
return result; return result;
} }
......
...@@ -24,18 +24,10 @@ package com.dangdang.ddframe.rdb.sharding.id.generator; ...@@ -24,18 +24,10 @@ package com.dangdang.ddframe.rdb.sharding.id.generator;
*/ */
public interface IdGenerator { public interface IdGenerator {
/**
* 初始化配置环境.
*
* @param tableName 逻辑表名称
* @param columnName 需要生成的列名称
*/
void initContext(String tableName, String columnName);
/** /**
* 生成Id. * 生成Id.
* *
* @return 返回生成的Id,返回值应为@{@link Number}对象或者为@{@link String}对象 * @return 返回生成的Id,返回值应为@{@link Number}对象或者为@{@link String}对象
*/ */
Object generateId(); Number generateId();
} }
...@@ -41,14 +41,8 @@ public class UnsupportedIdGeneratorTest { ...@@ -41,14 +41,8 @@ public class UnsupportedIdGeneratorTest {
} }
private static class IllegalIdGenerator implements IdGenerator { private static class IllegalIdGenerator implements IdGenerator {
@Override
public void initContext(final String tableName, final String columnName) {
}
@Override @Override
public Object generateId() { public Number generateId() {
return null; return null;
} }
} }
......
...@@ -26,12 +26,7 @@ public class IncrementIdGenerator implements IdGenerator { ...@@ -26,12 +26,7 @@ public class IncrementIdGenerator implements IdGenerator {
private final AtomicInteger i = new AtomicInteger(); private final AtomicInteger i = new AtomicInteger();
@Override @Override
public void initContext(final String tableName, final String columnName) { public Number generateId() {
}
@Override
public Object generateId() {
return i.incrementAndGet(); return i.incrementAndGet();
} }
} }
...@@ -24,7 +24,7 @@ tables: ...@@ -24,7 +24,7 @@ tables:
t_order: t_order:
actualTables: ds_${0..1}.t_order_${0..1} actualTables: ds_${0..1}.t_order_${0..1}
autoIncrementColumns: autoIncrementColumns:
order_id: - columnName: order_id
tableStrategy: tableStrategy:
shardingColumns: order_id shardingColumns: order_id
algorithmExpression: t_order_${order_id.longValue() % 2} algorithmExpression: t_order_${order_id.longValue() % 2}
......
...@@ -26,6 +26,7 @@ import lombok.Setter; ...@@ -26,6 +26,7 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
/** /**
...@@ -50,7 +51,7 @@ import java.util.Date; ...@@ -50,7 +51,7 @@ import java.util.Date;
@Slf4j @Slf4j
public class CommonSelfIdGenerator implements IdGenerator { public class CommonSelfIdGenerator implements IdGenerator {
public static final long SJDBC_EPOCH = 1477933200000L; public static final long SJDBC_EPOCH;
private static final long SEQUENCE_BITS = 12L; private static final long SEQUENCE_BITS = 12L;
...@@ -71,6 +72,13 @@ public class CommonSelfIdGenerator implements IdGenerator { ...@@ -71,6 +72,13 @@ public class CommonSelfIdGenerator implements IdGenerator {
private static long workerId; private static long workerId;
static { static {
Calendar calendar = Calendar.getInstance();
calendar.set(2016, Calendar.NOVEMBER, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
SJDBC_EPOCH = calendar.getTimeInMillis();
initWorkerId(); initWorkerId();
} }
...@@ -78,10 +86,6 @@ public class CommonSelfIdGenerator implements IdGenerator { ...@@ -78,10 +86,6 @@ public class CommonSelfIdGenerator implements IdGenerator {
private long lastTime; private long lastTime;
private String tableName;
private String columnName;
static void initWorkerId() { static void initWorkerId() {
String workerId = System.getProperty("sjdbc.self.id.generator.worker.id"); String workerId = System.getProperty("sjdbc.self.id.generator.worker.id");
if (!Strings.isNullOrEmpty(workerId)) { if (!Strings.isNullOrEmpty(workerId)) {
...@@ -105,25 +109,13 @@ public class CommonSelfIdGenerator implements IdGenerator { ...@@ -105,25 +109,13 @@ public class CommonSelfIdGenerator implements IdGenerator {
CommonSelfIdGenerator.workerId = workerId; CommonSelfIdGenerator.workerId = workerId;
} }
/**
* 初始化环境.
*
* @param tableName 逻辑表名称
* @param columnName 需要生成的列名称
*/
@Override
public void initContext(final String tableName, final String columnName) {
this.tableName = tableName;
this.columnName = columnName;
}
/** /**
* 生成Id. * 生成Id.
* *
* @return 返回@{@link Long}类型的Id * @return 返回@{@link Long}类型的Id
*/ */
@Override @Override
public synchronized Object generateId() { public synchronized Number generateId() {
long time = clock.millis(); long time = clock.millis();
Preconditions.checkState(lastTime <= time, "Clock is moving backwards, last time is %d milliseconds, current time is %d milliseconds", lastTime, time); Preconditions.checkState(lastTime <= time, "Clock is moving backwards, last time is %d milliseconds, current time is %d milliseconds", lastTime, time);
if (lastTime == time) { if (lastTime == time) {
...@@ -135,7 +127,7 @@ public class CommonSelfIdGenerator implements IdGenerator { ...@@ -135,7 +127,7 @@ public class CommonSelfIdGenerator implements IdGenerator {
} }
lastTime = time; lastTime = time;
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("{}.{}:{}-{}-{}", tableName, columnName, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(lastTime)), workerId, sequence); log.debug("{}-{}-{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(lastTime)), workerId, sequence);
} }
return ((time - SJDBC_EPOCH) << TIMESTAMP_LEFT_SHIFT_BITS) | (workerId << WORKER_ID_LEFT_SHIFT_BITS) | sequence; return ((time - SJDBC_EPOCH) << TIMESTAMP_LEFT_SHIFT_BITS) | (workerId << WORKER_ID_LEFT_SHIFT_BITS) | sequence;
} }
......
...@@ -45,11 +45,8 @@ public abstract class AbstractWorkerIdTest { ...@@ -45,11 +45,8 @@ public abstract class AbstractWorkerIdTest {
@Test @Test
public void testWorkerId() { public void testWorkerId() {
CommonSelfIdGenerator idGenerator = new CommonSelfIdGenerator(); CommonSelfIdGenerator idGenerator = new CommonSelfIdGenerator();
idGenerator.initContext("order", "id");
assertThat((Long) idGenerator.generateId(), is(getWorkerId() << 12L)); assertThat((Long) idGenerator.generateId(), is(getWorkerId() << 12L));
assertThat(idGenerator.getTableName(), is("order"));
assertThat(idGenerator.getColumnName(), is("id"));
assertThat(idGenerator.getLastTime(), is(CommonSelfIdGenerator.SJDBC_EPOCH)); assertThat(idGenerator.getLastTime(), is(CommonSelfIdGenerator.SJDBC_EPOCH));
assertThat(idGenerator.getSequence(), is(0L)); assertThat(idGenerator.getSequence(), is(0L));
assertThat(CommonSelfIdGenerator.getWorkerId(), is(getWorkerId())); assertThat(CommonSelfIdGenerator.getWorkerId(), is(getWorkerId()));
......
...@@ -45,7 +45,6 @@ public class CommonSelfIdGeneratorTest { ...@@ -45,7 +45,6 @@ public class CommonSelfIdGeneratorTest {
final int taskNumber = threadNumber << 2; final int taskNumber = threadNumber << 2;
final CommonSelfIdGenerator idGenerator = new CommonSelfIdGenerator(); final CommonSelfIdGenerator idGenerator = new CommonSelfIdGenerator();
idGenerator.initContext("order", "id");
Set<Long> hashSet = new HashSet<>(); Set<Long> hashSet = new HashSet<>();
for (int i = 0; i < taskNumber; i++) { for (int i = 0; i < taskNumber; i++) {
hashSet.add(executor.submit(new Callable<Long>() { hashSet.add(executor.submit(new Callable<Long>() {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册