盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

activiti修改内置的DDL SQL脚本初始化逻辑

Activiti 分享牛 4259℃

摘要:

在使用activiti的时候,我们只需要设置流程引擎配置类中的databaseSchemaUpdate开关属性值为true,流程引擎在启动的时候,如果发现数据库中相应的表不存在,则理解会创建内置的一些表,比如history、identity以及engine三个模块对应的表,在实际的项目开发中,我们可能也有类似的需求,要让流程引擎启动的时候,初始化一些我们自身项目的DDL,这个需求如何实现呢?本文重点进行讲解。关于activiti内置的DDL也可以通过该方式进行实现。

  • 该需求的实现可以分为如下几个步骤:

  • 自定义ShareniuDbSqlSessionFactory类

  • 自定义ShareniuDbSqlSession类

  • 通过流程引擎配置类使用上述的两个自定义类

  • 书写DDL语句

  • 让activiti执行自己的DDL语句

自定义ShareniuDbSqlSessionFactory类代码如下:

public class ShareniuDbSqlSessionFactory extends DbSqlSessionFactory {
public Class<?> getSessionType() {
return DbSqlSession.class;
}
public Session openSession() {
return new ShareniuDbSqlSession(this);
}
}

自定义ShareniuDbSqlSession类代码如下:

public class ShareniuDbSqlSession extends DbSqlSession {
public ShareniuDbSqlSession(DbSqlSessionFactory dbSqlSessionFactory) {
super(dbSqlSessionFactory);
}
protected void dbSchemaCreateEngine() {
super.dbSchemaCreateEngine();
executeMandatorySchemaResource("shareniu", "shareniu");
}
public String getResourceForDbOperation(String directory, String operation,
String component) {
String databaseType = dbSqlSessionFactory.getDatabaseType();
if (operation.equals("shareniu")) {
return "com/shareniu/chapter18/sqlsession/shareniu/init.sql";
}else {
return "org/activiti/db/" + directory + "/activiti." + databaseType
+ "." + operation + "." + component + ".sql";
}
}
}

自定义SQL语句如下:

CREATE TABLE `act_state` (
`processId` varchar(64) NOT NULL,
`state` tinyint(4) DEFAULT '0' COMMENT '状态 0普通 1催办',
PRIMARY KEY (`processId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


 

通过流程引擎配置类使用上述的两个自定义类代码如下所示:


 

新建测试方法初始化流程引擎即可。数据库表变化如下所示:


 

ok,完美。

转载请注明:分享牛 » activiti修改内置的DDL SQL脚本初始化逻辑