Activiti学习笔记二

创建数据库

初始化数据库表(方式一)

/**
     * 第一种初始化数据库的方法
     */
    public static void createTable1(){
        //创建activiti配置对象实例
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        //设置数据库的相关连接属性
        configuration.setJdbcDriver("com.mysql.jdbc.Driver");
        configuration.setJdbcUrl("jdbc:mysql://:3306/mydatabase");
        configuration.setJdbcUsername("");
        configuration.setJdbcPassword("");

        //设置数据库表的生成方式。设置建表策略
        /**
         * ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP;如果存在就不创建
         * ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE;不会创建数据库表
         * ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE;每次都会创建数据库表
         * drop-create 每次都会把数据库里面的activiti相关的表删除,在重新创建
         */
       configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

       //得到程序引擎的实例
        ProcessEngine processEngine = configuration.buildProcessEngine();
    }

初始化数据库表(方式二)

使用核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://:3306/mydatabase"></property>
        <property name="jdbcUsername" value=""></property>
        <property name="jdbcPassword" value=""></property>
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
        <!-- false:默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
             true:activiti会对数据库中所有表进行更新操作,如果表不存在,则自动创建
             create_drio:在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
             drop-create:在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
         -->
        <property name="databaseSchemaUpdate" value="true"></property>
    </bean>
</beans>
    /**
     * 第二种方法
     */
    public static void createTable2(){
        ProcessEngine engine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("/activiti.cfg.xml").buildProcessEngine();
    }
activiti.cfg.xml说明(核心配置文件)

可以使用自带的属性

可以使用外部的数据源

定义数据库配置参数

  • jdbcUrl:数据库的JDBCURL
  • jdbcDriver:对应不同数据库类型的驱动
  • jdbcUSername:连接数据库的用户名
  • jdbcPassword:连接数据库的密码

基于JDBC参数配置的数据库连接,会使用默认的MyBatis连接池,下面的参数可以用来配置连接池(来自mybatis参数)

  • jdbcMaxActiveConnections:连接池中处于被使用状态的连接的最大值,默认为10
  • jdbcMaxIdleConnections:连接池中处于空闲状态的连接的最大值
  • jdbcMaxCheckoutTime:连接被取出使用的最长时间,超过时间会被强制回收,默认为20000
  • jdbcMaxWaitTime:这是一个底层配置,让连接池可以在长时间无法获得连接时,打印一条日志,并重新尝试获取一个连接(避免因为错误配置导致沉默的操作失败),默认为20000
  • dataSource:可以配置其他数据源
  • databaseSchemaUpdate:设置数据库表的创建策略
核心API
  • ProcessEngine

            //要求核心配置文件的名称必须是/activiti.cfg.xml
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            
            //管理流程定义 操作的是act_ge_bytearray act_ge_property act_re_deployment act_re_model act_re_procdef
            RepositoryService repositoryService = processEngine.getRepositoryService();
            //管理流程运行的act_ru_event_subscr act_ru_execution act_ru_identitylink act_ru_job act_ru_task act_ru_va
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //操作act_ru_task
            TaskService taskService = processEngine.getTaskService();
            //操作act_id_info act_id_membership act_id_user
            IdentityService identityService = processEngine.getIdentityService();
            //操作act_hi_actinst act_hi_attachment act_hi_comment act_hi_detail act_hi_identitylink act_hi_procinst
            HistoryService historyService = processEngine.getHistoryService();
    

    说明:

    1、在activiti中最核心的可,其他的类都是由他而来

    2、产生方式

  ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

在前面看到了两种创建ProicessEngine(流程引擎)的方式,而这里要简化很多,调用ProcessEngines的getDefaultProcessEngine方法时会自动加载classpath下名为activiti.cfg.xml文件

3、可以产生RepositoryService

  RepositoryService repositoryService = processEngine.getRepositoryService();

4、可以产生RuntimeService

  RuntimeService runtimeService = processEngine。getRuntimeService();

5、可以产生TaskService

  TaskService taskService = processEngine.getTaskService();

​ 6、可以产生IdentityService

IdentityService identityService = processEngine.getIdentityService();

​ 7、可以产生HistoryService

HistoryService historyService = processEngine.getHistoryService();

RepositoryService:管理流程定义

RuntimeService:执行管理,包括启动、推进、删除流程实例等等

TaskService:任务管理

HistoryService:历史管理(执行完的数据的管理)

IdentityService:组织机构管理

FormService:一个可选服务,任务表单管理

ManagerService:管理器服务

  • RepositoryService

    是activiti的仓库服务类,所谓的仓库指流程定义文档的两个文件,bpmn文件和流程图片

    1、产生方式

    RepositoryService repositoryService = processEngine.getRepositoryService();
    

    2、可以产生DeploymentBuilder,用来定义流程部署的相关参数

    DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
    

    3、删除流程定义

    repositoryService.deleteDeployment(deploymentId);
    
  • RuntimeService

    是activiti的流程执行服务类。可以从这个服务类中获取很多关于流程执行的相关信息,操作act_ru_execution

  • TaskService

    是activiti的任务服务类,可以从这个类中获取任务的信息

    操作act_ru_task

  • HistoryService

    是Activiti的查询历史信息的类。在一个流程执行完成后,这个对象为我们提供查询历史信息。

  • ProcessDefinition

    流程定义类,可以从这里获取资源文件等

  • ProcessInstance

    代表流程定义的执行实例,如刘凡请了一天的假,他就必须发出一个流程实例的申请。一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度等信息。流程实例就表示一个流程从开始到结束的最大的流程分支,即一个流程中流程实例只有一个

  • Execution

    Activiti用这个对象去描述流程执行的每一个节点,在没有并发的情况下,Execution就如同ProcessInstance。流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution

总结:一个流程中,执行对象可以存在多个,但是流程实例只能有一个

​ 当流程按照规则只执行一次的时候,那么流程实例就是执行对象

流程图的绘制

此处我使用的时idea绘制流程图

1、引入插件

点击菜单【File】–>【Settings…】打开【Settings】窗口。

点击左侧【Plugins】按钮,在右侧输出"actiBPM",点击下面的【Search in repositories】链接会打开【Browse Repositories】窗口。

下载插件

2、创建bpmn文件进行绘图

绘制流程图

拖动图标进行绘图,将鼠标放在图标中心,出现扇形图标可以进行图标之间的连线

流程定义

id为流程定义id,name为流程定义的名称

任务详细

id与name为任务的属性

assignee为任务的执行对象

流程图绘制完成后将对应的bpmn后缀改为xml文件

邮件点击文件show diagrams 然后选择show designer

然后左上角点击export to file(idea中为导出的图标,箭头形式)

与xml文件保存在同一个位置中

HelloWorld程序(模拟流程的执行)

部署流程

public class helloWorld {
    /**
     * 部署流程
     */
    private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    @Test
    public void deployProcess(){
        //得到RepositoryService
        RepositoryService service = processEngine.getRepositoryService();
        //部署
        InputStream isBpmn = this.getClass().getResourceAsStream("/LeaveBill.xml");
        InputStream isPng = this.getClass().getResourceAsStream("/LeaveBill.png");
        Deployment deployment = service.createDeployment().name("请假流程001")//部署的名称
                .addInputStream("LeaveBill.xml", isBpmn)//设置;流程图的xml文件
                .addInputStream("LeaveBill.png", isPng)//设置流程图的PNG文件
                .deploy();//确定
        /**
         * act_re_deployment:流程部署表
         * act_re_model:
         * act_re_procdef:流程定义表,它和部署表里面的数据是一一对应的
         * act_ge_bytearray:二进制文件存放表,和部署表和定义表是2-1关系
         * act_ge_property:系统内置表存放activiti的版本和自动增长的字段
         */

        System.out.println("流程部署成功:");
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
        System.out.println("部署时间:" + deployment.getDeploymentTime().toLocaleString());
    }
}

启动流程

/**
     * 启动流程
     */
    @Test
    public void startProcess(){

        /**
         * act_ru_execution:流程实例ID,里面有流动ID,流程定义ID
         * act_ru_identitylink:当前流程节点的办理人信息
         * act_ru_task:当前正在执行的流程任务表
         * act_ru_variable:执行的流程变量
         */

        //得到流程运行服务
        RuntimeService runtimeService = this.processEngine.getRuntimeService();
        //启动流程、
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("LeaveBill");
        System.out.println("流程启动成功");
        System.out.println("流程实例ID:" + processInstance.getId());
    }

完成任务:

/**
     * 完成任务
     */
    @Test
    public void completeTask(){
        String taskId = "2505";
        //得到任务的Service
        TaskService taskService = this.processEngine.getTaskService();
        taskService.complete(taskId);
        System.out.println("任务完成");
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值