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 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); } }