增加lock(Sequences sequences, boolean ignoreSeq)、release(Sequences sequences, boolean ignoreSeq)方法
This commit is contained in:
@@ -33,10 +33,15 @@ public class SequencesUnlockDaoImpl implements SequencesUnlockDao {
|
||||
|
||||
@Override
|
||||
public boolean delete(SequencesUnlock sequencesUnlock) {
|
||||
String sql = "delete from `%s_unlock` where `%s`=? and `%s`=? and `%s`=?";
|
||||
sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn(), tableConfig.getSeqColumn());
|
||||
int result = this.jdbcTemplate.update(sql, sequencesUnlock.getKey(), sequencesUnlock.getType(), sequencesUnlock.getSeq());
|
||||
return result != 0;
|
||||
String sql = "delete from `%s_unlock` where `%s`=? and `%s`=?";
|
||||
sql = String.format(sql, tableConfig.getTable(), tableConfig.getKeyColumn(), tableConfig.getTypeColumn());
|
||||
if (sequencesUnlock.getSeq() != null) {
|
||||
sql += " and `%s`=?";
|
||||
sql = String.format(sql, tableConfig.getSeqColumn());
|
||||
return this.jdbcTemplate.update(sql, sequencesUnlock.getKey(), sequencesUnlock.getType(), sequencesUnlock.getSeq()) != 0;
|
||||
} else {
|
||||
return this.jdbcTemplate.update(sql, sequencesUnlock.getKey(), sequencesUnlock.getType()) != 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -167,6 +167,17 @@ public interface Generator {
|
||||
*/
|
||||
boolean lock(Sequences sequences);
|
||||
|
||||
/**
|
||||
* 忽略{@link Sequences#getSeq()} ,仅通过{@link Sequences#getKey()}和{@link Sequences#getType()}来锁定序号。
|
||||
* <p/>
|
||||
* 如果ignoreSeq为false,则等价于{@link #lock(Sequences)}
|
||||
*
|
||||
* @param sequences 需要锁定的序号
|
||||
* @param ignoreSeq 是否忽略序号
|
||||
* @return 锁定结果
|
||||
*/
|
||||
boolean lock(Sequences sequences, boolean ignoreSeq);
|
||||
|
||||
/**
|
||||
* 释放所有未使用的序号
|
||||
* <p/>
|
||||
@@ -205,6 +216,16 @@ public interface Generator {
|
||||
*/
|
||||
void release(Sequences sequences);
|
||||
|
||||
/**
|
||||
* 忽略{@link Sequences#getSeq()}来释放指定序号。一般用于业务对象删除后,对应序号需要回收使用时。
|
||||
* <p/>
|
||||
* 如果ignoreSeq为false,则等价于{@link #release(Sequences)}
|
||||
*
|
||||
* @param sequences 需要释放的序号。一般是一个通过{@link Sequences#setKey(String)}、{@link Sequences#setType(String)}、{@link Sequences#setSeq(Long)}三方法一起手动构建或通过{@link Sequences#Sequences(String, String, Long)}构造方法构建的实例对象
|
||||
* @param ignoreSeq 是否忽略序号
|
||||
*/
|
||||
void release(Sequences sequences, boolean ignoreSeq);
|
||||
|
||||
/**
|
||||
* 清空所有闲置序号和未锁定序号
|
||||
*/
|
||||
|
||||
@@ -111,7 +111,7 @@ public class SequencesGenerator implements Generator {
|
||||
|
||||
@Override
|
||||
public synchronized String generate(String key, String type, Integer minLength) {
|
||||
Sequences sequences = this.generate(key, type);
|
||||
Sequences sequences = generate(key, type);
|
||||
if (sequences == null)
|
||||
return null;
|
||||
return sequences.format(minLength);
|
||||
@@ -242,6 +242,18 @@ public class SequencesGenerator implements Generator {
|
||||
return sequencesUnlockDao.delete(condition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean lock(Sequences sequences, boolean ignoreSeq) {
|
||||
if (!ignoreSeq)
|
||||
return lock(sequences);
|
||||
if (sequences == null)
|
||||
return true;
|
||||
SequencesUnlock condition = new SequencesUnlock(sequences);
|
||||
condition.setSeq(null);
|
||||
//将使用中表的对应数据删除,空闲表中数据在生成时会删除,因此这里不需要处理该表
|
||||
return sequencesUnlockDao.delete(condition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void release() {
|
||||
//列出所有使用中表存在的序号
|
||||
@@ -292,6 +304,20 @@ public class SequencesGenerator implements Generator {
|
||||
sequencesUnusedDao.save(new SequencesUnused(sequences, new Date()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void release(Sequences sequences, boolean ignoreSeq) {
|
||||
if (!ignoreSeq) {
|
||||
release(sequences);
|
||||
return;
|
||||
}
|
||||
if (sequences == null)
|
||||
return;
|
||||
SequencesUnlock sequencesUnlock = new SequencesUnlock(sequences);
|
||||
sequencesUnlock.setSeq(null);
|
||||
sequencesUnlockDao.delete(sequencesUnlock);
|
||||
//由于忽略了序号,因此不需要将未使用序号放到SequencesUnused里面
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void clear() {
|
||||
sequencesUnlockDao.deleteAll();
|
||||
|
||||
Reference in New Issue
Block a user