169 lines
5.5 KiB
Java
169 lines
5.5 KiB
Java
import com.kingbase8.ds.KBSimpleDataSource;
|
||
import com.mysql.cj.jdbc.MysqlDataSource;
|
||
import com.yanghuanglin.seq.config.GeneratorConfig;
|
||
import com.yanghuanglin.seq.config.TableConfig;
|
||
import com.yanghuanglin.seq.generator.Generator;
|
||
import com.yanghuanglin.seq.generator.impl.SequencesGenerator;
|
||
import com.yanghuanglin.seq.po.Sequences;
|
||
import dm.jdbc.driver.DmdbDataSource;
|
||
import org.junit.Test;
|
||
import org.postgresql.ds.PGSimpleDataSource;
|
||
|
||
import javax.sql.DataSource;
|
||
import java.sql.DatabaseMetaData;
|
||
import java.util.HashSet;
|
||
import java.util.Set;
|
||
import java.util.concurrent.ArrayBlockingQueue;
|
||
import java.util.concurrent.ThreadPoolExecutor;
|
||
import java.util.concurrent.TimeUnit;
|
||
|
||
/**
|
||
* @author yanghuanglin
|
||
* @since 2022/1/28
|
||
*/
|
||
public class SeqTest {
|
||
private static final DataSource dataSource;
|
||
private static final Generator generator;
|
||
|
||
static {
|
||
dataSource = dm();
|
||
|
||
GeneratorConfig generatorConfig = new GeneratorConfig(dataSource);
|
||
System.out.println("DbType: " + generatorConfig.getDbType());
|
||
|
||
TableConfig tableConfig = new TableConfig();
|
||
tableConfig.setTable("sequences");
|
||
tableConfig.setKeyColumn("SEQUENCE_KEY");
|
||
tableConfig.setTypeColumn("SEQUENCE_TYPE");
|
||
tableConfig.setSeqColumn("CURRENT");
|
||
generatorConfig.setTableConfig(tableConfig);
|
||
generatorConfig.setDayZeroFilling(false);
|
||
generatorConfig.setMonthZeroFilling(false);
|
||
|
||
generator = new SequencesGenerator(generatorConfig);
|
||
}
|
||
|
||
private static DataSource mysql() {
|
||
MysqlDataSource mysqlDataSource = new MysqlDataSource();
|
||
mysqlDataSource.setURL("jdbc:mysql://127.0.0.1:3306/sequence");
|
||
mysqlDataSource.setUser("root");
|
||
mysqlDataSource.setPassword("root");
|
||
return mysqlDataSource;
|
||
}
|
||
|
||
private static DataSource kingbase8() {
|
||
KBSimpleDataSource kbDataSource = new KBSimpleDataSource();
|
||
kbDataSource.setURL("jdbc:kingbase8://127.0.0.1:54321/cemis?currentSchema=sequence");
|
||
kbDataSource.setUser("kingbase");
|
||
kbDataSource.setPassword("kingbase");
|
||
return kbDataSource;
|
||
}
|
||
|
||
private static DataSource pgsql() {
|
||
PGSimpleDataSource pgDataSource = new PGSimpleDataSource();
|
||
pgDataSource.setURL("jdbc:postgresql://127.0.0.1:54321/cemis?currentSchema=sequence");
|
||
pgDataSource.setUser("kingbase");
|
||
pgDataSource.setPassword("kingbase");
|
||
return pgDataSource;
|
||
}
|
||
|
||
private static DataSource dm() {
|
||
DmdbDataSource dmdbDataSource = new DmdbDataSource();
|
||
dmdbDataSource.setURL("jdbc:dm://127.0.0.1:5236?schema=sequence");
|
||
dmdbDataSource.setUser("SYSDBA");
|
||
dmdbDataSource.setPassword("SYSDBA");
|
||
return dmdbDataSource;
|
||
}
|
||
|
||
@Test
|
||
public void createTable() {
|
||
generator.createTable();
|
||
}
|
||
|
||
@Test
|
||
public void generateTest() {
|
||
//释放未锁定序列号
|
||
generator.release();
|
||
|
||
Set<String> set = new HashSet<>();
|
||
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100));
|
||
for (int i = 0; i < 5; i++) {
|
||
final int finalI = i;
|
||
threadPoolExecutor.execute(() -> {
|
||
Sequences sequences = generator.generate("SNT", "MISSION");
|
||
String pattern = "处〔#year#〕#fix##seq#";
|
||
String fix = "10801" + finalI;
|
||
String formattedSeq = generator.format(sequences.getSeq(), fix, pattern);
|
||
generator.lock(sequences);
|
||
set.add(formattedSeq);
|
||
System.out.println(formattedSeq);
|
||
Sequences parse = generator.parse(formattedSeq, pattern, fix.length());
|
||
System.out.println(parse);
|
||
});
|
||
}
|
||
threadPoolExecutor.shutdown();
|
||
while (true) {
|
||
if (threadPoolExecutor.isTerminated())
|
||
break;
|
||
}
|
||
System.out.println(set.size());
|
||
}
|
||
|
||
@Test
|
||
public void releaseTest() {
|
||
generator.release();
|
||
}
|
||
|
||
@Test
|
||
public void formatTest() {
|
||
String s = "select * from sequences where `%s`=? and `%s`=?";
|
||
System.out.println(String.format(s, "key", "value"));
|
||
}
|
||
|
||
@Test
|
||
public void parseTest() {
|
||
String seqPattern = "ZZF#year##month##fix##seq#";
|
||
String formatted = "ZZF202202A18";
|
||
|
||
//A1视为固定字符串,其长度为2
|
||
Sequences sequences = generator.parse(formatted, seqPattern, 2);
|
||
|
||
String key = "zzfCode" + sequences.getYear();
|
||
|
||
sequences.setKey(key);
|
||
sequences.setType("MISSION");
|
||
System.out.println(sequences);
|
||
}
|
||
|
||
@Test
|
||
public void unusedTest() {
|
||
Sequences sequences = new Sequences();
|
||
sequences.setKey("0010001$distrainCode2024");
|
||
sequences.setType("MISSION");
|
||
sequences.setSeq(1L);
|
||
boolean result = generator.unused(sequences);
|
||
assert result;
|
||
}
|
||
|
||
@Test
|
||
public void lockTest() {
|
||
generator.generate("0010001$distrainCode2024","MISSION");
|
||
Sequences sequences = new Sequences();
|
||
sequences.setKey("0010001$distrainCode2024");
|
||
sequences.setType("MISSION");
|
||
sequences.setSeq(1L);
|
||
boolean result = generator.lock(sequences);
|
||
assert result;
|
||
}
|
||
|
||
@Test
|
||
public void lockedTest() {
|
||
Sequences sequences = new Sequences();
|
||
sequences.setKey("0010001$distrainCode2024");
|
||
sequences.setType("MISSION");
|
||
sequences.setSeq(1L);
|
||
boolean result = generator.locked(sequences);
|
||
System.out.println("locked: " + result);
|
||
}
|
||
}
|