Skip to content

Mars 客户端模式

Mars 客户端独立使用模式,无需部署服务端即可实现序列基本功能。

1. 集成方式

该种模式下,仅需依赖独立的客户端 jar 包,无需部署服务端、管理端即可使用序列,轻量快捷;客户端直连数据库获取序列,目前仅支持 springboot 工程集成。

1.1 引入客户端依赖

xml
<dependency>
    <groupId>com.dcits.mars</groupId>
    <artifactId>mars-client-standalone</artifactId>
    <version>3.8.0</version>
</dependency>

1.2 yml 参数配置

yaml
#galaxy-config配置   
galaxy:
  #租户ID    
  tenantId: core
  #应用ID    
  appId: TEST_APP
  #环境    
  profile: dev

1.3 执行数据库脚本

集成 mars 前应用连接的数据库中需提前执行原 server 端的数据库脚本(多数据源下如需指定分库请配合 libra-client 或其他数据中间件使用),保证数据库中包含以下三张表:

text
FW_SEQUENCES
FW_SEQUENCES_DEF
FW_SEQUENCES_MOULD

脚本位于 mars-client-standalone jar 包 resource/META-INF/db 目录下,目前支持 oracle/mysql 两种数据库。

2. 序列定义

可根据数据库表 FW_SEQUENCES_DEF 各列说明,提前插入定义序列,否则会使用默认模板创建序列不可修改。序列定义 SQL 示例:

sql
INSERT INTO fw_sequences_def (tenant_id, app_id, profile_name, seq_name, seq_type, seq_min_value, seq_max_value, seq_cache, seq_step, seq_circley, seq_status, create_time, create_user, update_time, update_user, description)
VALUES ('core', 'TEST_APP', 'dev', 'seq01', 'DBTS', 0, 999999999, 0, 1, 'Y', 'Y', '2023-06-27', 'SYSTEM', NULL, NULL, '测试序列01');

应用级模板

当默认模板不满足需求时,可通过 FW_SEQUENCES_MOULD 定义序列模板,当模板 ID 为 DEFAULT 时,该模板为应用级,会作为该应用的默认模板,注意租户、环境、应用,模板创建 SQL 示例:

sql
INSERT INTO fw_sequences_mould (tenant_id, app_id, profile_name, seq_mould_id, seq_min_value, seq_max_value, seq_step, seq_cache, seq_circley, description)
VALUES ('core', 'TEST_APP', 'dev', 'DEFAULT', 1, 999999999, 1, 0, 'Y', NULL);

系统级模板

当应用级默认模板不存在时,会尝试根据系统级默认模板自动创建序列,系统级模板租户、环境、应用值均固定为 MARS$SYSTEM,模板 ID 为 DEFAULT,示例 SQL 如下:

sql
INSERT INTO fw_sequences_mould (tenant_id, app_id, profile_name, seq_mould_id, seq_min_value, seq_max_value, seq_step, seq_cache, seq_circley, description)
VALUES('MARS$SYSTEM', 'MARS$SYSTEM', 'MARS$SYSTEM', 'DEFAULT', 1, 999999999, 1, 0, 'Y', NULL);

3. 获取序列

可以通过注解或者 Spring 容器获得序列生成客户端实例,核心代码示例如下:

java
//注入序列生成器
@Autowired
private ISequencesGenerator seq;     
...
//通过指定序列名称获取单个序列   
long seqNO = sequencesGenerator.getSeqNo("SNFS_001_LPL");

//通过指定序列名称和获取数量,批量获取序列   
List<Long> seqNos = sequencesGenerator.getSeqNoList("SNFS_001_LPL", 10);