目录1 环境准备 (1)2 创建SQL脚本 (1)3 下载所需依赖包 (2)3.1IDEA配置使用阿里云MAVEN仓库 (2)3.2下载所有依赖包 (5)4 修改配置文件 (5)4.1修改APPLICATION.PROPERTIES文件 (5)4.2修改POM.XML文件 (6)5 加载DM驱动程序 (6)5.1拷贝DM驱动程序 (6)5.2将驱动程序打入M AVEN仓库 (7)6 修改ACTIVITY-ENGINE-5.22.0 (8)6.1修改P ROCESS E NGINE C ONFIGURATION I MPL文件 (9)6.2修改D B S QL S ESSION F ACTORY文件 (9)6.3修改A BSTRACT Q UERY文件 (10)7 ACTIVITY-ENGINE-5.22.0打包 (11)8 验证结果 (12)9 附录 (12)1环境准备项目名称:Spring boot整合activiti工作流引擎实例Spring-Boot-Activiti5.22.0项目文件:Spring-Boot-Activiti5.22.0.zip 开发工具:IntelliJ IDEA 2020.2 (Ultimate Edition)IDEA安装路径:D:\IDEA项目路径:D:\IDEA\work将项目文件解压至D:\IDEA\work目录下,并导入IDEA:2创建SQL脚本将项目中activiti.sql脚本在数据库中创建。
说明:项目中activiti.sql脚本是Mysql的语法,可先在Mysql中创建,再通过DTS工具迁移至DM中。
也可使用以下activiti.sql直接在DM中创建(以下activiti.sql语法已修改为DM语法)。
DM语法activiti.sql脚本:activiti.sql3下载所需依赖包3.1IDEA配置使用阿里云maven仓库IDEA工具左上角:文件→设置→构建、执行、部署→构建工具→Maven 指定以下三个目录:Maven主目录(H): D:/IDEA/plugins/maven/lib/maven3用户设置文件(S): D:\IDEA\plugins\maven\lib\maven3\conf\settings.xml本地存储库(R):C:\Users\Administrator\.m2\repository在D:\IDEA\plugins\maven\lib\maven3\conf\settings.xml文件中新增以下内容,使用阿里云maven仓库:<mirror><id>alimaven</id><name>aliyun maven</name><url>/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf></mirror>3.2下载所有依赖包4修改配置文件4.1修改application.properties文件将配置文件中数据源部分,改为达梦数据源:# datasourcespring.datasource.url=jdbc:dm://127.0.0.1:5236spring.datasource.driver-class-name=dm.jdbc.driver.DmDriverername=SYSDBAspring.datasource.password=SYSDBA4.2修改pom.xml文件在配置文件中新增达梦驱动部分:<dependency><groupId>com.dm</groupId><artifactId>DmJdbcDriver</artifactId><version>1.8.0</version></dependency>5加载DM驱动程序5.1拷贝DM驱动程序达梦数据库驱动无法通过maven在线下载。
所以通过将DM8的驱动程序加载到Maven仓库中实现,使用的驱动程序如下:注意:DmJdbcDriver18.jar等名字和springboot不兼容。
需要试用DmJdbcDriver.jar这个名字。
将驱动程序拷贝到Maven仓库中,并自定义创建对应的路径(红色字体需要自己创建)。
本示例路径在:C:\Users\Administrator\.m2\repository\com\dm\DmJdbcDriver\1.8.0\DmJdbcDriver.j ar5.2将驱动程序打入Maven仓库使用mvn.cmd工具将DM8驱动程序打入Maven仓库,mvn.cmd工具在:D:\IDEA\plugins\maven\lib\maven3\bin目录下,通过以下命令进行打入Maven仓库:mvn.cmd install:install-file -DgroupId=com.dm -DartifactId=DmJdbcDriver -Dversion=1.8.0 -Dpackaging=jar -Dfile=C:\Users\Administrator\.m2\repository\com\dm\DmJdbcDriver\1.8.0\DmJdbcD river.jar点击重新加载,DM驱动程序就不报错了。
6修改Activity-engine-5.22.0将activiti-engine-5.22.0相关源码拷贝到工程src下,保持包路径不变,并做相应修改以支持达梦数据库。
6.1修改ProcessEngineConfigurationImpl文件在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl文件中,增加标红部分:public static final String DATABASE_TYPE_DM = "dm";public static final String DATABASE_TYPE_H2 = "h2";public static final String DATABASE_TYPE_HSQL = "hsql";public static final String DATABASE_TYPE_MYSQL = "mysql";public static final String DATABASE_TYPE_ORACLE = "oracle";…protected static Properties getDefaultDatabaseTypeMappings() {Properties databaseTypeMappings = new Properties(); databaseTypeMappings.setProperty("DM DBMS", DATABASE_TYPE_DM); databaseTypeMappings.setProperty("H2", DATABASE_TYPE_H2);6.2修改DbSqlSessionFactory文件在org.activiti.engine.impl.db.DbSqlSessionFactory文件中,增加标红部分:if ("oracle".equals(databaseType) || "dm".equals(databaseType)) {bulkInsertableMap.put(EventLogEntryEntity.class, Boolean.FALSE);}在org.activiti.engine.impl.db.DbSqlSessionFactory文件中,增加标红部分:// dmdatabaseSpecificLimitBeforeStatements.put("dm", ""); databaseSpecificLimitAfterStatements.put("dm", "LIMIT #{maxResults} OFFSET #{firstResult}");databaseSpecificLimitBetweenStatements.put("dm", "");databaseOuterJoinLimitBetweenStatements.put("dm", ""); databaseSpecificOrderByStatements.put("dm", defaultOrderBy);// h2databaseSpecificLimitBeforeStatements.put("h2", ""); databaseSpecificLimitAfterStatements.put("h2", "LIMIT #{maxResults} OFFSET #{firstResult}");databaseSpecificLimitBetweenStatements.put("h2", ""); databaseOuterJoinLimitBetweenStatements.put("h2", ""); databaseSpecificOrderByStatements.put("h2", defaultOrderBy);6.3修改AbstractQuery文件在org.activiti.engine.impl.AbstractQuery文件中,增加标红部分(2处):if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_FIRST)) {if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType)|| ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)|| ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {orderBy = orderBy + defaultOrderByClause + " NULLS FIRST";} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) { orderBy = orderBy + "isnull(" + column + ") desc," + defaultOrderByClause;} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType)|| ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) { orderBy = orderBy + "case when " + column + " is null then 0 else 1 end," + defaultOrderByClause;} else {orderBy = orderBy + defaultOrderByClause;}} else if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_LAST)) {if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType)|| ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)|| ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType) || ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {orderBy = orderBy + column + " " + sortOrder + " NULLS LAST";} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) { orderBy = orderBy + "isnull(" + column + ") asc," + defaultOrderByClause;} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType)|| ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) { orderBy = orderBy + "case when " + column + " is null then 1 else 0 end," + defaultOrderByClause;} else {orderBy = orderBy + defaultOrderByClause;}}7Activity-engine-5.22.0打包本示例是在MyEclipse中进行打包,项目右键导出jar即可:附:activiti-engine-5.22.0.jar包仅提供参考:activiti-engine-5.22.0.jar8验证结果9附录修改后,支持达梦数据库的activiti-engine-5.22.0.jar以及涉及到的相关资料,下载地址:https:///s/1xzBbSTAbkfWRpG0-T-LeOg提取码:9472。