Compare commits
2 Commits
e2e5939810
...
c65bd7b36f
| Author | SHA1 | Date | |
|---|---|---|---|
| c65bd7b36f | |||
| 721cd48d96 |
8
pom.xml
8
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.yanghuanglin</groupId>
|
<groupId>com.yanghuanglin</groupId>
|
||||||
<artifactId>seq</artifactId>
|
<artifactId>seq</artifactId>
|
||||||
<version>1.11.0</version>
|
<version>1.12.0</version>
|
||||||
<name>seq</name>
|
<name>seq</name>
|
||||||
<description>seq</description>
|
<description>seq</description>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -34,6 +34,12 @@
|
|||||||
<version>42.7.3</version>
|
<version>42.7.3</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.dameng</groupId>
|
||||||
|
<artifactId>DmJdbcDriver18</artifactId>
|
||||||
|
<version>8.1.3.140</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.yanghuanglin.seq.config;
|
|||||||
import com.yanghuanglin.seq.enums.DbType;
|
import com.yanghuanglin.seq.enums.DbType;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -133,7 +134,8 @@ public class GeneratorConfig {
|
|||||||
public DbType getDbType() {
|
public DbType getDbType() {
|
||||||
if (this.dbType == null) {
|
if (this.dbType == null) {
|
||||||
try {
|
try {
|
||||||
String productName = this.dataSource.getConnection().getMetaData().getDatabaseProductName();
|
Connection connection = dataSource.getConnection();
|
||||||
|
String productName = connection.getMetaData().getDatabaseProductName();
|
||||||
this.dbType = DbType.of(productName);
|
this.dbType = DbType.of(productName);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
throw new RuntimeException("获取数据库类型失败", e);
|
throw new RuntimeException("获取数据库类型失败", e);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public abstract class SequencesBase {
|
|||||||
sql = sql.replaceAll("`create_time`", String.format("`%s`", tableConfig.getCreateTimeColumn()));
|
sql = sql.replaceAll("`create_time`", String.format("`%s`", tableConfig.getCreateTimeColumn()));
|
||||||
break;
|
break;
|
||||||
case Dameng:
|
case Dameng:
|
||||||
|
case DM_DBMS:
|
||||||
case PostgreSQL:
|
case PostgreSQL:
|
||||||
case KingbaseES:
|
case KingbaseES:
|
||||||
sql = sql.replaceAll("\"sequences(_unused|_unlock)\"", String.format("%s$1", tableConfig.getTable()));
|
sql = sql.replaceAll("\"sequences(_unused|_unlock)\"", String.format("%s$1", tableConfig.getTable()));
|
||||||
@@ -79,6 +80,7 @@ public abstract class SequencesBase {
|
|||||||
break;
|
break;
|
||||||
case PostgreSQL:
|
case PostgreSQL:
|
||||||
case Dameng:
|
case Dameng:
|
||||||
|
case DM_DBMS:
|
||||||
case KingbaseES:
|
case KingbaseES:
|
||||||
sqlString = sqlString.replaceAll("`(.+?)`", "\"$1\"");
|
sqlString = sqlString.replaceAll("`(.+?)`", "\"$1\"");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ public enum DbType {
|
|||||||
MySQL("mysql"),
|
MySQL("mysql"),
|
||||||
//达梦数据库
|
//达梦数据库
|
||||||
Dameng("dm"),
|
Dameng("dm"),
|
||||||
|
//达梦数据库
|
||||||
|
DM_DBMS("dm"),
|
||||||
//人大金仓数据库
|
//人大金仓数据库
|
||||||
KingbaseES("pgsql"),
|
KingbaseES("pgsql"),
|
||||||
//PostgreSQL数据库
|
//PostgreSQL数据库
|
||||||
@@ -28,7 +30,7 @@ public enum DbType {
|
|||||||
*/
|
*/
|
||||||
public static DbType of(String productName) {
|
public static DbType of(String productName) {
|
||||||
for (DbType value : DbType.values()) {
|
for (DbType value : DbType.values()) {
|
||||||
if (value.name().equalsIgnoreCase(productName)) {
|
if (value.name().equalsIgnoreCase(productName.replace(" ", "_"))) {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ CREATE TABLE IF NOT EXISTS "sequences"
|
|||||||
"key" VARCHAR(64) NOT NULL,
|
"key" VARCHAR(64) NOT NULL,
|
||||||
"type" VARCHAR(64) NOT NULL,
|
"type" VARCHAR(64) NOT NULL,
|
||||||
"seq" BIGINT NOT NULL,
|
"seq" BIGINT NOT NULL,
|
||||||
"update_time" TIMESTAMP,
|
"update_time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY ("key", "type")
|
PRIMARY KEY ("key", "type")
|
||||||
);
|
);
|
||||||
COMMENT ON TABLE "sequences" IS '当前序号表';
|
COMMENT ON TABLE "sequences" IS '当前序号表';
|
||||||
@@ -11,16 +11,3 @@ COMMENT ON COLUMN "sequences"."key" IS '序号英文名称';
|
|||||||
COMMENT ON COLUMN "sequences"."type" IS '序号类型';
|
COMMENT ON COLUMN "sequences"."type" IS '序号类型';
|
||||||
COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号';
|
COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号';
|
||||||
COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间';
|
COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间';
|
||||||
|
|
||||||
/*
|
|
||||||
@触发器设置,功能:自动记录更新时间
|
|
||||||
@触发器名为 SEQUENCES_UPDATE_TIME
|
|
||||||
@触发器执行范围为每行生效
|
|
||||||
*/
|
|
||||||
CREATE OR REPLACE TRIGGER SEQUENCES_UPDATE_TIME BEFORE UPDATE ON "sequences" FOR EACH ROW
|
|
||||||
BEGIN
|
|
||||||
NEW."update_time":=SYSDATE;
|
|
||||||
END;
|
|
||||||
|
|
||||||
/*启动触发器*/
|
|
||||||
ALTER TRIGGER SEQUENCES_UPDATE_TIME ENABLE;
|
|
||||||
@@ -5,10 +5,12 @@ import com.yanghuanglin.seq.config.TableConfig;
|
|||||||
import com.yanghuanglin.seq.generator.Generator;
|
import com.yanghuanglin.seq.generator.Generator;
|
||||||
import com.yanghuanglin.seq.generator.impl.SequencesGenerator;
|
import com.yanghuanglin.seq.generator.impl.SequencesGenerator;
|
||||||
import com.yanghuanglin.seq.po.Sequences;
|
import com.yanghuanglin.seq.po.Sequences;
|
||||||
|
import dm.jdbc.driver.DmdbDataSource;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.postgresql.ds.PGSimpleDataSource;
|
import org.postgresql.ds.PGSimpleDataSource;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
import java.sql.DatabaseMetaData;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
@@ -24,7 +26,7 @@ public class SeqTest {
|
|||||||
private static final Generator generator;
|
private static final Generator generator;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
dataSource = mysql();
|
dataSource = dm();
|
||||||
|
|
||||||
GeneratorConfig generatorConfig = new GeneratorConfig(dataSource);
|
GeneratorConfig generatorConfig = new GeneratorConfig(dataSource);
|
||||||
System.out.println("DbType: " + generatorConfig.getDbType());
|
System.out.println("DbType: " + generatorConfig.getDbType());
|
||||||
@@ -65,6 +67,14 @@ public class SeqTest {
|
|||||||
return pgDataSource;
|
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
|
@Test
|
||||||
public void createTable() {
|
public void createTable() {
|
||||||
generator.createTable();
|
generator.createTable();
|
||||||
@@ -137,6 +147,7 @@ public class SeqTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void lockTest() {
|
public void lockTest() {
|
||||||
|
generator.generate("0010001$distrainCode2024","MISSION");
|
||||||
Sequences sequences = new Sequences();
|
Sequences sequences = new Sequences();
|
||||||
sequences.setKey("0010001$distrainCode2024");
|
sequences.setKey("0010001$distrainCode2024");
|
||||||
sequences.setType("MISSION");
|
sequences.setType("MISSION");
|
||||||
|
|||||||
Reference in New Issue
Block a user