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