初次提交

This commit is contained in:
杨黄林
2022-02-01 12:02:35 +08:00
parent 5218c2fd97
commit 1b4970e8ec
8 changed files with 259 additions and 2 deletions

View File

@@ -1,3 +1,5 @@
# spring-seq
# [seq](https://gitea.yanghuanglin.com/yhl452493373/seq) 使用示例
seq基于spring的使用示例
### 具体查看com.yang.springseq.config其中SeqGeneratorConfig为配置信息Startup为项目启动后执行的代码
*项目新建时执行下mvn clean来安装包到本地maven库如果其他地方已经执行过这个操作可以不用而且pom中也可以直接引用无需安装*

25
lib/seq-1.0.0-pom.xml Normal file
View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cdhncy</groupId>
<artifactId>seq</artifactId>
<version>1.0.0</version>
<name>seq</name>
<description>seq</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.15</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
</project>

110
pom.xml Normal file
View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yang</groupId>
<artifactId>spring-seq</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-seq</name>
<description>spring-seq</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.cdhncy</groupId>
<artifactId>seq</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</exclusion>
<exclusion>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>install-external</id>
<phase>clean</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>${project.basedir}/lib/seq-1.0.0.jar</file>
<pomFile>${pom.basedir}/lib/seq-1.0.0-pom.xml</pomFile>
<sources>${project.basedir}/lib/seq-1.0.0-sources.jar</sources>
<repositoryLayout>default</repositoryLayout>
<groupId>com.cdhncy</groupId>
<artifactId>seq</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

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

View File

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

View File

@@ -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<String> 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());
}
}

View File

@@ -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

View File

@@ -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() {
}
}