🐘快速开始(PostgreSQL)
版本支持:v2.16.1+
# Step 1:引入依赖
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-spring-boot-starter</artifactId>
<version>2.16.1</version>
</dependency>
<dependency>
<groupId>com.yomahub</groupId>
<artifactId>liteflow-rule-db-postgresql</artifactId>
<version>2.16.1</version>
</dependency>
# Step 2:写配置
这里要定两件事:插件用哪个DataSource连库,以及规则记在哪个隔离名下。两者没有关联。
先说连接。容器里只有一个DataSource时,一行都不用配,插件按类型取出来直接用,连接池和鉴权都沿用它。
多数据源的项目,或者规则要放独立的规则库,请指明用哪个bean:
liteflow.rule-db.postgresql.datasource-bean-name=liteflowRuleDataSource
不指明的话,有@Primary就会用主数据源,没有则按类型取不到,启动报错。
不要用liteflow.rule-db.postgresql.url
配了url,框架就走DriverManager裸连接,每次回源都新建连接,完全没有池化,只适合临时验证。生产环境请始终复用连接池。
这两者也是互斥的,只要url非空,插件就不会再去容器里找DataSource。
再说隔离名。liteflow.rule-db.application-name会写进四张表的application_name列,同一套库里不同取值的规则互相看不到。它只管隔离,和用哪个DataSource无关。
Spring Boot下它留空时会取spring.application.name:
spring.application.name=your-app
两个都没配会回落成default,多个应用共用一套库时请确保取值不同。Solon插件没有这个回落,需要显式配liteflow.rule-db.application-name。这个值还要和Step 4里Publisher的applicationName(...)一致。
所以对单数据源的Spring Boot应用来说,Rule-DB要的配置就是spring.application.name这一行,而这一行你本来就有。
# Step 3:建表
开发环境加个开关,让插件把四张表建齐:
liteflow.rule-db.postgresql.auto-init-table=true
表结构是模块内置的,不用翻DDL,也不用像旧SQL插件那样把字段名逐个映射到配置项里。
生产环境建议自己把四张表建好,DDL见存储结构参考,纳入你自己的DDL变更流程,这样执行账号可以保持只读。开着自动建表的话,执行账号就必须有DDL权限。
# Step 4:发布第一条规则
规则的增删改都走Publisher API,不用手写SQL。版本自增、md5重算、写变更日志、拿发布顺序锁,框架会在一个事务里做完。
独立发布程序使用PostgresqlPublisherConfig:
import com.yomahub.liteflow.publisher.PublishChainRequest;
import com.yomahub.liteflow.publisher.RulePublisher;
import com.yomahub.liteflow.publisher.RulePublisherFactory;
import com.yomahub.liteflow.repository.postgresql.PostgresqlPublisherConfig;
try (RulePublisher publisher = RulePublisherFactory.create(
PostgresqlPublisherConfig.builder()
.applicationName("your-app")
.dataSource(ruleDataSource) // 管理后台自己的连接池
.build())) {
publisher.publishChain(PublishChainRequest.builder()
.chainId("orderChain").el("THEN(a, b)").build());
}
和SQL一样,常驻的管理后台用dataSource(...),只有一次性脚本才用.url(...)。传进去的DataSource归调用方所有,Publisher不会去关它。
PostgreSQL用数据库事务原子提交内容、业务版本和change_log,变更靠seq轮询加周期对账收敛。Publisher在同一个事务里锁定change_lock.lock_id = 1,写入正文,再通过INSERT ... RETURNING seq取得变更序号,这个行锁保证了seq的分配顺序和提交顺序一致。
# Step 5:执行
和SQL一样,照常调flowExecutor.execute2Resp(...)。



