一文解读flowable工作流
flowable工作流的定义流程
🌜1. flowable
☁️ 1.1 定义
Flowable是一个开源的业务流程管理(BPM)平台,它可以帮助开发人员和业务专家快速构建、部署和管理复杂的业务流程。Flowable提供了一个可视化的工作流设计器,可以方便地定义工作流程、任务、网关、决策等元素,并支持多种流程引擎的选择,如Activiti、Camunda等。
Flowable的核心特性包括:
- 可视化工作流设计器:Flowable提供了一个直观、易用的工作流设计器,可以方便地定义工作流程、任务、网关、决策等元素。
- 多引擎支持:Flowable支持多种流程引擎的选择,如Activiti、Camunda等,可以根据应用程序的需求进行选择。
- 扩展性:Flowable提供了丰富的API和插件,可以方便地进行定制和扩展。
- 集成性:Flowable可以与Spring、Hibernate等常见的Java框架集成,从而实现更好的互操作性和可维护性。
☁️ 1.2 作用
Flowable可以十分灵活地加入你的应用/服务/构架。可以将JAR形式发布的Flowable库加入应用或服务,来嵌入引擎。
以JAR形式发布使Flowable可以轻易加入任何Java环境:Java SE;Tomcat、Jetty或Spring之类的servlet容器;JBoss或WebSphere之类的Java EE服务器,等等。
另外,也可以使用Flowable REST API进行HTTP调用。
也有许多Flowable应用(Flowable Modeler, Flowable Admin, Flowable IDM 与 Flowable Task),提供了直接可用的UI示例,可以使用流程与任务。
所有使用Flowable方法的共同点是核心引擎。核心引擎是一组服务的集合,并提供管理与执行业务流程的API。
☁️ 1.3 流程
Flowable的流程通常由以下几个步骤组成:
- 定义工作流:使用Flowable的工作流设计器定义工作流,包括流程定义、任务、网关、决策等元素。
- 配置流程引擎:选择合适的流程引擎,如Activiti、Camunda等,并进行相应的配置和集成。
- 创建流程实例:根据工作流定义创建一个新的流程实例,并将任务分配给相应的人员或组。
- 执行流程:流程实例启动后,会按照预定义的流程进行执行,包括任务完成、网关判断、决策结果等。
- 监控流程:可以使用Flowable提供的监控工具对流程进行实时监控和管理,包括查看流程状态、任务完成情况、性能指标等。
总之,Flowable的流程通常由工作流定义、流程引擎配置、流程实例创建和执行、流程监控等多个步骤组成,可以帮助快速构建、部署和管理复杂的业务流程。
🔥 2. 使用实例
😈 2.1 引入pom依赖
Flowable引擎在运行流程实例时,需要使用数据库来存储执行与历史数据,所以需要添加对应的数据库驱动依赖。 Flowable使用SLF4J作为内部日志框架。
<!--flowable 流程引擎-->
<!-- https://mvnrepository.com/artifact/org.flowable/flowable-spring-boot-starter-process -->
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-process</artifactId>
<version>6.4.1</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-ui-modeler-rest</artifactId>
<version>6.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
Log4j需要一个配置文件。在src/main/resources文件夹下添加log4j.properties文件,并写入下列内容:
log4j.rootLogger=DEBUG, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n
😈 2.2 yml文件
数据库自行创建 一个简单的yml配置:
#flowable
flowable:
common:
app:
idm-url: http://127.0.0.1:9602/flowable-idm
async-executor-activate: false
🚎 2.3 审批流程xml
一个简单的审批流程的demo: 将下面的XML保存在src/main/resources文件夹下
<?xml version='1.0' encoding='UTF-8'?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
</definitions>
🔎 2.4 引擎配置类
/**
* 流程引擎配置类
*/
@Configuration
public class ScnProccessEngine {
private static final Logger LOGGER = LoggerFactory.getLogger(ScnProccessEngine.class);
@Autowired
private DataSource dataSource;
@Autowired
protected ResourceLoader resourceLoader;
protected static Properties databaseTypeMappings = getDefaultDatabaseTypeMappings();
public static Properties getDefaultDatabaseTypeMappings() {
Properties databaseTypeMappings = new Properties();
return databaseTypeMappings;
}
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration() {
SpringProcessEngineConfiguration springProcessEngineConfiguration = new SpringProcessEngineConfiguration();
springProcessEngineConfiguration.setDataSource(dataSource);
springProcessEngineConfiguration.setDatabaseSchemaUpdate("true");
springProcessEngineConfiguration.setTransactionManager(dataSourceTransactionManager(dataSource));
return springProcessEngineConfiguration;
}
/**
* 事务管理器
* @param dataSource
* @return
*/
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(dataSource);
return dataSourceTransactionManager;
}
@Bean
public FlowableModelerAppProperties flowableModelerAppProperties() {
FlowableModelerAppProperties flowableModelerAppProperties = new FlowableModelerAppProperties();
return flowableModelerAppProperties;
}
/**
* sqlSessionTemplate的Bean
* @param sqlSessionFactory
* @return
*/
@Bean(destroyMethod = "clearCache") // destroyMethod: see https://github.com/mybatis/old-google-code-issues/issues/778
public SqlSessionTemplate SqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
private void closeDatabase(Liquibase liquibase) {
if (liquibase != null) {
Database database = liquibase.getDatabase();
if (database != null) {
try {
database.close();
} catch (DatabaseException e) {
LOGGER.warn("Error closing database", e);
}
}
}
}
}
📢 2.5 公共接口controller
/**
* Flowable 公共接口
*/
@RestController
@RequestMapping("/testDemo")
public class PubProccessController {
/**
* 根据用户身份信息查询用户代办任务
* @param userIdentityPo
* @return
*/
@RequestMapping("/queryUserTask")
public AjaxJson selectUserTaskByUserIdenty(@RequestBody UserIdentityPo userIdentityPo) throws GlobalException {
return ajaxJson;
}
/**
* 用户认领任务
* @param flowTaskPo
* @return
* @throws GlobalException
*/
@RequestMapping("/claimTask")
public AjaxJson claimTask(@RequestBody FlowTaskPo flowTaskPo) throws GlobalException {
AjaxJson ajaxJson = new AjaxJson();
return ajaxJson;
}
/**
* 查看流程图_高亮
* @param httpServletResponse
* @param flowTaskPo
* @throws GlobalException
*/
@RequestMapping("/genProcessDiagram")
public AjaxJson genProcessDiagram(HttpServletResponse httpServletResponse, @RequestBody FlowTaskPo flowTaskPo) throws GlobalException {
AjaxJson ajaxJson = new AjaxJson();
return ajaxJson;
}
}
上文写了一些公共的审批查看流程图等常用的方法。
🍂3. 支持的数据库
flowable支持的数据看有很多种 以下是官方给的支持的数据库的类型:
flowable的默认的数据库是h2 所以使用的时候需要对h2数据库有个简单的了解。
H2数据库是一个开源的Java数据库管理系统,它可以与各种关系型数据库进行集成,如MySQL、Oracle、PostgreSQL等。H2数据库是基于Java语言编写的,可以在Java应用程序中嵌入使用,也可以作为一个独立的数据库服务器运行。
H2数据库的特点包括:
- 轻量级:H2数据库非常轻量级,可以在内存中运行,不需要安装和配置外部数据库服务器。
- 快速:H2数据库支持高性能的JDBC驱动程序,可以实现快速的数据访问和查询。
- 开源免费:H2数据库是开源软件,可以免费使用和修改。
- 支持嵌入式:H2数据库可以嵌入到Java应用程序中使用,方便开发人员在应用程序中使用本地数据库。
H2数据库是一个轻量级、高性能、开源免费的Java数据库管理系统,适合用于开发嵌入式应用程序或小型项目中的数据存储和管理。
🚩 总结:
flowable 注意事项:
flowable会为我们自动创建表,用于数据,历史记录,流程定义,运行实例等等。 如果启动失败,解决错误以后,每次都需要把表数据清空,或者删除之后再重新启动。
flowable demo源码:flowable demo
如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏 🙌一起讨论 你的评价就是我✍️创作的动力! 💞💞💞
转载自:https://juejin.cn/post/7278245966599847977