diff --git a/README.md b/README.md index 4319e6b..1bdfdcd 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ -# spring-seq +# [seq](https://gitea.yanghuanglin.com/yhl452493373/seq) 使用示例 -seq基于spring的使用示例 \ No newline at end of file +### 具体查看com.yang.springseq.config,其中SeqGeneratorConfig为配置信息,Startup为项目启动后执行的代码 + +*项目新建时,执行下mvn clean来安装包到本地maven库,如果其他地方已经执行过这个操作,可以不用,而且pom中也可以直接引用,无需安装* \ No newline at end of file diff --git a/lib/seq-1.0.0-pom.xml b/lib/seq-1.0.0-pom.xml new file mode 100644 index 0000000..e7951be --- /dev/null +++ b/lib/seq-1.0.0-pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + com.cdhncy + seq + 1.0.0 + seq + seq + + 1.8 + + + + org.springframework + spring-jdbc + 5.3.15 + + + mysql + mysql-connector-java + 8.0.28 + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..0f7424b --- /dev/null +++ b/pom.xml @@ -0,0 +1,110 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.6.3 + + + com.yang + spring-seq + 0.0.1-SNAPSHOT + spring-seq + spring-seq + + 1.8 + + + + mysql + mysql-connector-java + runtime + + + org.springframework.boot + spring-boot-starter-web + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.2.2 + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + com.cdhncy + seq + 1.0.0 + + + org.springframework + spring-jdbc + + + mysql + mysql-connector-java + + + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + org.apache.maven.plugins + maven-install-plugin + 2.5 + + + install-external + clean + + install-file + + + ${project.basedir}/lib/seq-1.0.0.jar + ${pom.basedir}/lib/seq-1.0.0-pom.xml + ${project.basedir}/lib/seq-1.0.0-sources.jar + default + com.cdhncy + seq + 1.0.0 + jar + true + + + + + + + + diff --git a/src/main/java/com/yang/springseq/SpringSeqApplication.java b/src/main/java/com/yang/springseq/SpringSeqApplication.java new file mode 100644 index 0000000..2fffa17 --- /dev/null +++ b/src/main/java/com/yang/springseq/SpringSeqApplication.java @@ -0,0 +1,12 @@ +package com.yang.springseq; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringSeqApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringSeqApplication.class, args); + } +} diff --git a/src/main/java/com/yang/springseq/config/SeqGeneratorConfig.java b/src/main/java/com/yang/springseq/config/SeqGeneratorConfig.java new file mode 100644 index 0000000..600cc46 --- /dev/null +++ b/src/main/java/com/yang/springseq/config/SeqGeneratorConfig.java @@ -0,0 +1,44 @@ +package com.yang.springseq.config; + +import com.cdhncy.seq.config.GeneratorConfig; +import com.cdhncy.seq.config.TableConfig; +import com.cdhncy.seq.generator.Generator; +import com.cdhncy.seq.generator.impl.SequencesGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.transaction.support.TransactionTemplate; + +import javax.annotation.Resource; + +@Configuration +public class SeqGeneratorConfig { + @Resource + private JdbcTemplate jdbcTemplate; + @Resource + private TransactionTemplate transactionTemplate; + + @Bean + public TableConfig tableConfig() { + TableConfig tableConfig = new TableConfig(); +// tableConfig.setTable("sequences"); +// tableConfig.setKeyColumn("SEQUENCE_KEY"); +// tableConfig.setTypeColumn("SEQUENCE_TYPE"); +// tableConfig.setSeqColumn("SEQUENCE_NEXT_ID"); + return tableConfig; + } + + @Bean + public GeneratorConfig generatorConfig(TableConfig tableConfig) { + GeneratorConfig generatorConfig = new GeneratorConfig(); + generatorConfig.setJdbcTemplate(jdbcTemplate); + generatorConfig.setTransactionTemplate(transactionTemplate); + generatorConfig.setTableConfig(tableConfig); + return generatorConfig; + } + + @Bean + public Generator generator(GeneratorConfig generatorConfig) { + return new SequencesGenerator(generatorConfig); + } +} diff --git a/src/main/java/com/yang/springseq/config/Startup.java b/src/main/java/com/yang/springseq/config/Startup.java new file mode 100644 index 0000000..bd0bd8a --- /dev/null +++ b/src/main/java/com/yang/springseq/config/Startup.java @@ -0,0 +1,45 @@ +package com.yang.springseq.config; + +import com.cdhncy.seq.generator.Generator; +import com.cdhncy.seq.po.Sequences; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Component +public class Startup implements ApplicationRunner { + @Resource + private Generator generator; + + @Override + public void run(ApplicationArguments args) { + //释放未锁定序列号 + 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++) { + threadPoolExecutor.execute(() -> { + Sequences sequences = generator.generate("SNT", "MISSION"); + String formattedSeq = generator.format(sequences.getSeq(), 5, "处〔#year#〕10801#seq#"); + generator.lock(sequences); + set.add(formattedSeq); + System.out.println(formattedSeq); + }); + } + threadPoolExecutor.shutdown(); + while (true) { + if (threadPoolExecutor.isTerminated()) + break; + } + System.out.println(set.size()); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..00b3164 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,6 @@ +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/sequence + username: root + password: root + driver-class-name: com.mysql.jdbc.Driver diff --git a/src/test/java/com/yang/springseq/SpringSeqApplicationTests.java b/src/test/java/com/yang/springseq/SpringSeqApplicationTests.java new file mode 100644 index 0000000..20279f0 --- /dev/null +++ b/src/test/java/com/yang/springseq/SpringSeqApplicationTests.java @@ -0,0 +1,13 @@ +package com.yang.springseq; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class SpringSeqApplicationTests { + + @Test + void contextLoads() { + } + +}