【新手向】Idea整合Activiti工作流安装、学习以及一些踩坑

最近的一个项目需要用到Activiti工作流。正好跟大家分享一下我的采坑经验。由于我是用的是Idea,所以就以Idea举例了(pom.xml配置也在下面)关于数据库的安装和配置请看我上一篇!另外需要注意的是,这里我定义的库名是“activiti”那么我就需要提前建好这个库~

一、下载工作流插件

1.首先打开Idea,在菜单栏找到:
File->Setting->Plugins
在这里插入图片描述2.在Marketplace中搜索actiBPM,下载安装即可跳到第四步;如果出现了下图所示,不要急,有VPN的同学可以打开VPN再试试,没有的同学接着看在这里插入图片描述a.如果你的File->Setting->System Setting->Updates中,有【user secure connection】这个选项,把勾取消再试试去Marketplace中下载
b.如果你的Updates中没有这个选项,那就进到下面的链接

https://plugins.jetbrains.com/plugin/7429-actibpm

稍等片刻,你会看到:在这里插入图片描述点击下载即可
你会得到一个.jar文件,记住它的路径,或者干脆把它放到你Idea的安装目录在这里插入图片描述之后回到Idea中,还是在Setting的Plugins中:在这里插入图片描述选择从磁盘导入,完成安装
4.大家一起确认一下
在这里插入图片描述5.重启Idea,如果你可以在File->New中看到如下所示,就说明安装成功在这里插入图片描述

二、新建一个自己的工作流项目

1.创建一个Java项目(这一步应该不需要详细步骤~)
2.重点来啦,在src/main/下创建一个resources资源目录,在resources目录下再来一个存放.BPMN文件和你的流程图的目录,我的叫diagram在这里插入图片描述
3.真重点来啦!下面是pom.xml文件,如果联网了,那么其中的版本号可不做修改

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>activiti</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>5.18.0</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-model</artifactId>
            <version>5.18.0</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-converter</artifactId>
            <version>5.18.0</version>
        </dependency>
        <!--<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-json-converter</artifactId>
            <version>5.18.0</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>5.18.0</version>
        </dependency>

        <dependency>
            <groupId>org.activiti.cloud</groupId>
            <artifactId>activiti-cloud-services-api</artifactId>
            <version>5.18.0</version>
        </dependency>-->
        <!--JUnit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
        <!--activiti-->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>5.18.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-beans</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>jackson-core-asl</artifactId>
                    <groupId>org.codehaus.jackson</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>commons-lang3</artifactId>
                    <groupId>org.apache.commons</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>commons-lang3</artifactId>
                    <groupId>org.apache.commons</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--MySQL 驱动包,如果是其他库的话需要换驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.10</version>
        </dependency>
    </dependencies>
</project>

4.然后选中diagram,单击鼠标右键,创建一个BPMN格式的文件
在这里插入图片描述5.惊不惊喜? 在这里插入图片描述只需要用这三个键,就可以做出一个Demo啦,拖动按钮到画布上,双击可以改名,当光标放到图形中心,会变成一个小黑点,此时按住鼠标左键,即可拖动指向下一个流程节点。
ps:大家可以像我一样,先写一个简单的案例,把Activiti学会再说
6.将写好的.bpmn文件改后缀名为.xml文件在这里插入图片描述
7.然后再右键这.xml文件,选择Diagrams->show BPMN 2.0 Designer在这里插入图片描述就会出现咱们需要的流程图啦。没有这个选项的同学们重启一下试试看
8.导出这个图,我们可以选择导出到一个位置之后复制到我们的resoureces/diagram目录下,下可以直接导出到这个目录下
在这里插入图片描述此处可能会有中文乱码,别慌!首先打开Idea的bin目录,然后找到idea64.exe.vmoptions
在这里插入图片描述
加入这样一行
-Dfile.encoding=UTF-8
重启Idea即可;当然,已经导出的图片里的乱码是不会因为这个配置的改变就消失的哦
9.activiti.cfg.xml文件的配置
这个文件名不建议各位修改,因为是Activiti默认的。(当然可以改!想知道的话,我放到最后啦)
这里是第一种配置方式:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--数据源配置-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=utf8" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>
    <!--activiti单独运行的ProcessEngine配置,使用单独启动方式
    默认情况下 bean的id=processEngineConfiguration,其他的名字需要在JAVA代码中,在
    createProcessEngineConfigurationFromResource(String resource, String beanName)第二个参数位置上填写自定义名称-->
    <bean id="processEngineConfiguration" class=
            "org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <!--代表数据源-->
        <property name="dataSource" ref="dataSource"></property>
        <!--是否生成表结构-->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
</beans>

这里是第二种配置方式,推荐使用第一种,因人而异吧:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=utf8"></property>
        <property name="jdbcUsername" value="root"></property>
        <property name="jdbcPassword" value="root"></property>
        //Activiti的24个表,不存在则自动创建
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
</beans>

至此配置工作就完成了~如有遗漏请及时通知我!
下面是一些小Demo,帮助大家快速掌握

三、测试数据库中,表的创建

1.首先在test目录下创建一个测试类

@Test
    public void testTable(){
        //1.创建ProcessEngineConfiguration对象
        ProcessEngineConfiguration configuration =
                ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
        //2.创建ProcessEngine对象,这是第一种
        ProcessEngine processEngine = configuration.buildProcessEngine();
        //3.输出processEngine对象
        System.out.println(processEngine);
        //提供了操作_hi_表的方法
        HistoryService historyService = processEngine.getHistoryService();
        //提供了操作_ru_表的方法
        RuntimeService runtimeService = processEngine.getRuntimeService();
    }

运行之后去看看结果吧~这里给大家提供第二种创建表的方式:

 @Test
    public void testGenTable(){
        //这个方法需要有两个条件‘
        //条件1:activiti配置文件名称:activiti.cfg.xml
        //条件2:bean的id="processEngineConfiguration"
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println(processEngine);
    }

注释中的注意事项要注意!并且记得要删库再建库~!关于24张表的分析留到以后吧

四、流程定义之后,我们需要部署

创建表只是一句话的事情,那么要操作这么多的表总不能一点一点写SQL,我们来看看Activiti是怎么操作的;这里我是在src/main/java/下写的,不是测试类哦

/**
 * 流程定义的部署
 * 运行之后,activiti的表有哪些?
 * act_ge_bytearray   流程定义的bpmn文件和png文件
 * act_ge_property    流程定义的一些信息
 * act_re_deployment  部署信息
 */
public class Demo1 {
    //测试流程定义的部署
    public static void main(String[] args) {
        //1.创建ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //3.进行部署,添加资源
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("diagram/holiday.bpmn")
                .addClasspathResource("diagram/holiday.png")
                .name("请假申请流程")
                .deploy();
        //4.输出部署的一些信息
        System.out.println("名称:"+deployment.getId());
        System.out.println(deployment.getName());
    }
}

各位如果是自己写的.bpmn文件,需要注意在资源路径中改成自己的正确的路径,name中同理

五、流程实例的启动

/**
 * 流程实例的启动
 * 启动流程实例的前提是已经完成流程定义的部署
 * 影响的哪些表
 * act_hi_actinst           已完成的活动信息
 * act_hi_procinst          流程实例
 * act_hi_identitylink      参与者信息
 * act_hi_taskinst          任务实例
 * act_ru_execution         执行表
 * act_ru_identitylink      参与者信息
 * act_ru_task              任务
 */
public class Demo2 {
    public static void main(String[] args) {
        //1.得到ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //2.得到RuntimeService对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //3.创建流程实例
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday");
        //4.输出实例的相关信息
        System.out.println("流程部署的ID:"+processInstance.getDeploymentId());
        System.out.println("流程实例ID:"+processInstance.getId());
        System.out.println("活动ID:"+processInstance.getActivityId());
    }
}

接着我们来看看控制台输出的和自己表中的对比
未完待续…

六、这里是最后

想个性的同学们,看过来,让我们打开Activiti的源码(什么,你不会?那你先别追求个性了,好好练习熟练掌握才是正途)
我们可以看到:在这里插入图片描述只需要将这里的名称改成你想要的名称即可~但是一定要注意拼写
谢谢观看~

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值