package org.quickbundle.base.beans.idwrapper; import java.util.List; import java.util.concurrent.atomic.AtomicLong; import org.quickbundle.base.beans.AbstractDbWrapper; import org.quickbundle.base.beans.TableIdRuleVo; import org.quickbundle.base.beans.factory.RmIdFactory; import org.quickbundle.itf.base.IRmIdWrapper; import org.quickbundle.tools.context.RmBeanHelper; import org.quickbundle.tools.support.log.RmLogHelper; public class ShardingInCacheWrapper extends AbstractDbWrapper implements IRmIdWrapper { //生产模式下的ID增长Long private AtomicLong atomicLong = null; public ShardingInCacheWrapper(TableIdRuleVo ruleVo) { super(ruleVo); } public void init() { String sql = getSqlSelectMax(); try { List<String> maxIds = RmBeanHelper.getCommonServiceInstance().queryForList(sql, String.class); long lTableId = getMaxIdOrDefault(maxIds.size()==0 ? null : maxIds.get(0)); atomicLong = new AtomicLong(lTableId); } catch (Exception e) { e.printStackTrace(); RmLogHelper.getLogger(RmIdFactory.class).error("初始化" + ruleVo.getTableName() + "的最大id失败:" + e.toString()); } } public synchronized String[] nextValue(int length) { //返回值 String[] ids = new String[length]; for (int i = 0; i < ids.length; i++) { ids[i] = String.valueOf(atomicLong.getAndIncrement()); } return ids; } }