Activiti工作流框架学习六:与Spring框架整合

Spring Boot整合Activiti工作流详解 通过Spring Boot与Activiti的整合,可以快速构建基于工作流的业务系统,大大提高开发效率和系统灵活性。 阅读详情

一、Java项目

导入activiti提供的示例rest里的44个jar包,注意:还需要再导入mysql-connector-java-5.1.5-bin.jar

<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <!-- 注册一个数据源,这里使用的数据源是spring自带的jdbc数据源,另外还可以替换为c3p0数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql:///activiti_day2" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>

    <!-- 注册事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 流程引擎配置对象 -->
    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <!-- 注入数据源 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 注入事务管理器对象 -->
        <property name="transactionManager" ref="transactionManager"/>
        <property name="databaseSchemaUpdate" value="true" />
    </bean>

    <!-- 使用工厂创建流程引擎对象 -->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>
</beans>
//示例代码
public class SpringActivitiTest {
    public static void main(String[] args) {
        // 创建spring工厂
        ApplicationContext ctx = new ClassPathXmlApplicationContext("com\\zyj\\activiti\\spring\\applicationContext.xml");
        // 从工厂中获得对象
        ProcessEngine processEngine = (ProcessEngine) ctx.getBean("processEngine");
        List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery().list();
        for (ProcessDefinition processDefinition : list) {
            System.out.println(processDefinition);
        }
    }
}

二、与SSH整合的Web项目

<!-- 与整合activiti有关的applicationContext.xml -->
<!-- 加载jdbc属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${driverClass}"/>
    <property name="jdbcUrl" value="${jdbcUrl}"/>
    <property name="user" value="${user}"/>
    <property name="password" value="${password}"/>
</bean>

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
    <!-- 注入数据源 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 注入事务管理器对象 -->
    <property name="transactionManager" ref="transactionManager"/>
    <property name="databaseSchemaUpdate" value="true" />
</bean>

<!-- 使用工厂创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>

<!-- 注册activiti所需的Service -->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"></bean>
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"></bean>
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"></bean>
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"></bean>
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"></bean>

/**
 * 流程定义管理Action
 */
@Controller
@Scope("prototype")
public class ProcessDefinitionAction extends ActionSupport {
    // 注入Service
    @Autowired
    private RepositoryService repositoryService;
    /**
     * 查询最新版本流程定义列表数据
     */
    public String list() {
        ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
        query.latestVersion();// 查询最新版本
        query.orderByProcessDefinitionName().desc();// 排序
        List<ProcessDefinition> list = query.list();// 执行查询
        // 压栈
        ActionContext.getContext().getValueStack().set("list", list);
        return "list";
    }
    // 接收上传的文件,包含.bpmn和.png的.zip文件
    private File zipFile;
    public void setZipFile(File zipFile) {
        this.zipFile = zipFile;
    }
    /**
     * 部署流程定义
     * @throws FileNotFoundException 
     */
    public String deploy() throws FileNotFoundException {
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        deploymentBuilder.addZipInputStream(new ZipInputStream(new FileInputStream(zipFile)));
        deploymentBuilder.deploy();
        return "toList";
    }
    //接收流程定义id
    private String id;
    public void setId(String id) {
        this.id = id;
    }
    /**
     * 输出png图片,用于页面展示流程定义图
     */
    public String showpng(){
        //获取png图片对应的输入流
        InputStream pngStream = repositoryService.getProcessDiagram(id);
        ActionContext.getContext().getValueStack().set("pngStream", pngStream);
        return "showpng";
    }
    /**
     * 删除流程定义
     */
    public String delete(){
        String deltag = "0";
        //根据流程定义id查询部署id
        ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
        query.processDefinitionId(id);//根据id过滤
        ProcessDefinition processDefinition = query.singleResult();
        String deploymentId = processDefinition.getDeploymentId();
        try{
            repositoryService.deleteDeployment(deploymentId);
        }catch (Exception e) {
            //当前要删除的流程定义正在使用
            deltag = "1";
            ActionContext.getContext().getValueStack().set("deltag", deltag);
            ProcessDefinitionQuery query2 = repositoryService.createProcessDefinitionQuery();
            query2.latestVersion();// 查询最新版本
            query2.orderByProcessDefinitionName().desc();// 排序
            List<ProcessDefinition> list = query2.list();// 执行查询
            // 压栈
            ActionContext.getContext().getValueStack().set("list", list);
            return "list";
        }
        return "toList";
    }
}

struts.xml

<!-- 流程定义管理 -->
<action name="processDefinitionAction_*" class="processDefinitionAction"
    method="{1}">
    <result name="list">/WEB-INF/pages/workflow/processdefinition_list.jsp
    </result>
    <result name="toList" type="redirectAction">
        processDefinitionAction_list
    </result>
    <result name="showpng" type="stream">
        <param name="contentType">image/png</param>
        <param name="inputName">pngStream</param>
        <!-- 弹出下载对话框,提供下载
            <param name="contentDisposition">attachment;filename="abc.png"</param>
            <param name="bufferSize">1024</param>
         -->
    </result>
</action>
SpringBoot整合Activiti工作流完整指南 本文摘要: SpringBoot整合Activiti工作流开发指南提供了从基础到实战的完整解决方案。文章首先介绍工作流引擎核心概念和BPMN2.0标准,然后详细讲解开发环境搭建、SpringBoot集成配置和项目结构设计。实战部分包含请假流程和复杂报销流程的建模示例,覆盖流程变量管理、条件表达式设计和表单处理等核心功能。高级特性章节探讨了任务监听器、执行监听器和自定义服务任务的实现,以及性能监控与优化策略。最后提供了数据库配置、缓存优化和常见问题解决方案等最佳实践。通过REST API设计示例和完整项目代码 阅读详情

相关推荐

Spring整合Activiti工作流

代码地址如下:http://www.demodashi.com/demo/11911.html 一、 前期准备安装必要的开发环境 eclipse/intellij+maven 3.5.x + tomcat 7/8/9+mysql 5.x 将sql目录下面的5个SQL文件导入数据库中二、 程序实现1. 项目结构2. 主要配置 流程引擎的配置,在activiti.cfg.xml和spring-myb

findhappy117的博客 9145

activiti-application.yml配置

spring: activiti: #1.flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常 #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建 #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表) #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎) .

A_bad_horse的专栏 1380

Spring Boot 应用集成 Activiti 工作流引擎

Spring Boot 应用集成 Activiti 工作流引擎

u013558123的博客 1496

在Springboot集成Activiti工作流引擎-引入、调用,测试【基础讲解】

工作流 通过计算机对业务流程自动化执行管理 他主要解决的是使在多个参与者之间按照某种“预定义规则”自动进行传递稳定 信息或任务的过程 通俗来讲 业务上一个玩着的审批流程 比如请假,出差 外出采购等 工作流引擎就是来解决流程问题的 提高我们的工作效率 如果没有工作流引擎 我们就需要自己去写逻辑 就特别的复杂 扩展性还不强 使用工作流引擎 业务改变,不需要修改代码 如果是我们自己写的逻辑 有可能 业务改变,代码也需要改变 那么为什么工作流引擎不用修改代码 因为我们的工作流引擎都实现了一个规范 这个规范要

Json的知识梦工厂 3776

Spring Boot + Activiti 工作流框架搭建

文章目录前言: Java工作流引擎与Activiti框架搭建环境与步骤总览创建Spring Boot项目引入activiti等依赖包安装activiti designer绘制流程流程名以及节点的分派人的设定示例流程编写activiti 工作流代码创建数据库配置application.ymlSpring Security配置主页面响应Activiti 主要服务类Activiti 代码演示完整项目地址 前言: Java工作流引擎与Activiti 工作流(Workflow)是业务流程在计算机上的自动化,工作流引

oscar999的专栏 1537

Ascend C 算子开发遇到的问题及解决方法

在学习Ascend C算子开发进阶课程的时候,进行Ascend C自定义算子工程、算子调用等实验,在开发环境中遇到了一些问题,在这里记录一下。首先如果在启智社区CANN版本为6.3 ,要进行Ascend C算子开发,需要更新CANN版本。

qq_45257495的博客 5108

Activiti 6研究01 - 流程文件的手动导入

在某些场景下,需要进行流程定义文件的手动导入,此处分享一下我的大致流程及踩过的坑,希望对大家有所帮助。

Python的专栏 1706

信息隐藏 数字图像空域隐写与分析技术的实现

【代码】信息隐藏 数字图像空域隐写与分析技术的实现。

Yungoal的博客 468

最全springMVC框架工作流程

Spring执行流程: 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在spri......

jjyybsm的博客 3184

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

CORS(跨域资源共享)漏洞解决方法

最近,测试环境上的项目被360测试人员检测出来有一个CORS漏洞,以下记录下漏洞问题与解决方法。 一、低危漏洞:CORS漏洞问题 测试人员访问某个url,将请求头中的Origin字段修改为任意值,结果仍然能获得正确的响应报文,就说明有CORS漏洞。 当CORS的设置不正确时,就会带来安全问题;当响应头中的Access-Control-Allow-Origin设置为null或*时,表示信任任何域,这时候就可能引入安全问题。 修复方法是合理配置CORS,判断Origin是否合法;具体说就是不让在nginx或t

BHSZZY的博客 3万+

Activiti工作流

目录Activiti工作流概念Activiti7介绍 Activiti工作流 概念 工作流。通过计算机对业务流程自动化执行管理,主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。 Activiti7 介绍 Activiti是一个工作流引擎,Activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由Activiti进行管理,减少

个人下雪的博客 2万+

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2873

Activiti工作流与业务整合实战

Activiti工作流与业务整合进行实践,技术调研对比JBPM与Activiti工作流的特性,结合实际业务和技术背景对Activiti进行改造和融合,通过Aop切面抽离工作流业务,通过Spel进行形参实参绑定及复杂数据结构传参,通过合理的流程设计、架构设计实现Activiti与业务逻辑整合

大摩羯先生 7544

ProcessingJoy —— 最简单的实时流体模拟【JAVA】

实现基于非常非常经典的 Paper ——Jos Stam 的Real-Time Fluid Dynamics for Games 代码和注释 float visc = 0.0f; float diff = 0.0f; int N = 250; int size = (N + 2) * (N + 2); float[] u = new float[size]; // 速度, 水平/竖直 float[] v = new float[size]; float[] u_prev = new fl...

ShaderJoy 的兴趣技术杂货铺 2814

ADS基础教程24 - Gerber文件的导入

一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!

XZ_ZC的博客 3049

Spring和Activiti工作流整合详解

Spring和Activiti工作流整合详解 一、概述 Activiti作为一个流行的开源工作流引擎,正在不断发展,其6.0版本以API形式提供服务,而之前版本基本都是要求我们的应用以JDK方式与其交互,只能将其携带到我们的应用中,而API方式则可以服务器独立运行方式,能够形成一个专网内工作流引擎资源共享的方式。 本篇activiti工作流基于5.17.0。 首发地址: 品茗IT-同步发布 品茗I...

feiyangtianyao的专栏 9153

28_Spring AI 干货笔记之 OpenAI 聊天功能

本文详细介绍了在Spring AI框架中集成OpenAI聊天模型的方法。内容涵盖API密钥配置、通过starter依赖启用自动配置、连接与模型参数的详细设置,并重点说明了运行时选项的动态覆盖机制。文章还深入讲解了多模态处理(图像与音频)、结构化输出、函数调用等高级功能,提供了示例控制器和手动配置指南,并讨论了与OpenAI兼容服务器的适配与推理模型思维链的获取。

在科技的浪潮中,我们寻找着创新的火种,在代码的海洋里,我们编织着智慧的网。腾飞开源,就是这样一个由技术精英汇聚而成的博客平台,我们致力于分享在Java、Python、IoT和人工智能等领域的最新研究成果和实战经验。 在腾飞开源的博客上,你会看到紧跟技术前 1655

工作流实战之Activiti7

本文主要介绍了 Activiti 的相关使用与集成,适合想要学习 Activiti 的读者食用。Activiti 是目前使用最为广泛的开源工作流引擎之一,在小七 2017 年走向程序员这一条不归路的时候,它就已经是开源工作流引擎的老大哥了。学习一门新技术/新框架,我们第一件事就是从它的官网入手,下面贴出 Activiti 的官网从官网的描述,我们可以知道 Activiti 是领先的轻量级的、以 java 为中心的开源 BPMN 引擎,可以支持现实世界的流程自动化需求。 Activiti Cloud 是新一代

洋YANG的博客 7293

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Activiti7《第七式:破掌式》——掌控工作流全局,整合至Spring

是掌控工作流全局的。无论是复杂的业务流程还是庞大的系统架构,唯有掌握全局,才能游刃有余。本篇将教你如何运用处理大规模的工作流场景,灵活运用表结构和,从而整个工作流系统。:文章内容参考了视频中有提到,这套教程适合有一定基础的朋友。如果你仔细学习,部分可能需要自己花时间去消化。视频中讲述的某些实战案例并没有,所以你需要通过实践进一步提升。通过这篇文章的系列学习,相信你可以掌握Activiti7的精髓,并最终达到工作流境界。别忘了,学到的东西只有通过,才能真正成为属于你的知识。

程序员-杨胡广的博客 1189

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

spingMVC+spring+mybatis整合activiti工作流引擎

在第一家公司工作的时候做的第一个项目主要负责开发营运审批系统,因为有过其他工作引擎的开发基础,但由于是收费的,,所以在在项目调研阶段我先搜索资料选择使用哪个开源工作流引擎,最终一致确定了spingMVC+spring+mybatis整合Activiti工作流,今天来整理一下,希望对大家有用,ssm整合网上很多,今天主要的内容是activit嵌入ssm当中,首先来说一下:1. 我理解的工作流:   ...

AbsolutelyNT的博客 4084

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Activiti 工作流引擎 详解

工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。

共勉 2万+

Activiti5工作流框架学习之Struts2+Hibernate+Spring整合配置

测试环境WindowsSTSMysql5Jdk1.8Tomcat8 Maven3Struts2 + Spring4 + Hibernate3 + Activiti5.17一、整合Spring与Hibernate3配置DataSourceapplication-config.xml内容:<!-- 加载数据库配置文件 --> <context:property-placeholder location=

一大三千的博客 4931

SSM框架整合Activiti工作流

1.首先在maven项目的pom.xml文件中引入activiti工作流的jar包: <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.22.0</version> </dependency> <dependency>

兴趣是最好的老师 713

Activiti工作流引擎整合系列【收藏可做笔记系列】

目录Activiti整合Spring一、Activiti与Spring整合开发1.1 Activiti与Spring整合的配置1)、在pom.xml文件引入坐标2)、创建activiti-spring.xml1.2 测试Activiti与Spring整合1)、测试代码2)、执行流程分析二、Activiti7与SpringBoot整合开发2.1 SpringBoot整合Activiti7的配置2.2 SpringBoot的application.yml文件配置2.3 编写启动类2.4 添加

『愚』的博客 1441
上一篇: Activiti工作流框架学习五:排他网关
下一篇: 面试题--Java(一)
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值