技术标签: activiti springboot
activiti6.0直接使用starter集成到springboot2.0时,会报异常,无法直接进行集成。所以我才用spring-activiti来集成activiti6.0.
整体文件结构如下:
1.pom文件依赖
<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>com.stu</groupId>
<artifactId>activitiApplication</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- 数据库相关 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.19</version>
</dependency>
<!-- webmvc必须依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- activiti集成spring -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>
</dependencies>
</project>
我采用的是mysql5.7.22,如果parent才用2.0.4版会导致连接数据库出现问题,所有我才用2.0.3(也可以采用2.0.1或者2.0.2版本).
2.bpmn文件配置springboot默认从classpath的processes文件下读取,所以必须建该文件夹。示例流程图如下:
3.properties文件配置:
server.port=8080
server.servlet.context-path=/activiti
mybatis.mapper-locations=classpath:mapper/*.xml
spring.datasource.url=jdbc:mysql://localhost:3306/stu
spring.datasource.username = root
spring.datasource.password = password
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
4.启动类:
package com.stu;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.stu.mapper")
public class ActivitiApplication {
public static void main(String[] args) {
SpringApplication.run(ActivitiApplication.class, args);
}
}
5.配置类:
package com.stu.config;
import java.io.IOException;
import javax.sql.DataSource;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
public class ActivitiConfuguration {
@Bean
public ProcessEngine processEngine(DataSourceTransactionManager transactionManager, DataSource dataSource) throws IOException {
SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
//自动部署已有的流程文件
Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourceLoader.CLASSPATH_URL_PREFIX + "processes/*.bpmn");
configuration.setTransactionManager(transactionManager);
configuration.setDataSource(dataSource);
configuration.setDatabaseSchemaUpdate("true");
configuration.setDeploymentResources(resources);
configuration.setDbIdentityUsed(false);
return configuration.buildProcessEngine();
}
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine) {
return processEngine.getRepositoryService();
}
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine) {
return processEngine.getRuntimeService();
}
@Bean
public TaskService taskService(ProcessEngine processEngine) {
return processEngine.getTaskService();
}
@Bean
public HistoryService historyService(ProcessEngine processEngine) {
return processEngine.getHistoryService();
}
@Bean
public ManagementService managementService(ProcessEngine processEngine) {
return processEngine.getManagementService();
}
@Bean
public IdentityService identityService(ProcessEngine processEngine) {
return processEngine.getIdentityService();
}
}
package com.stu.config;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import com.alibaba.druid.pool.DruidDataSource;
@Configuration
public class DruidConfiguration {
@Autowired
Environment env;
/**
* 数据源:配置DruidDataSource
* @return
*/
@Bean(destroyMethod = "close")
public DataSource dataSource() {
DruidDataSource ds = new DruidDataSource();
ds.setUrl(env.getProperty("spring.datasource.url"));
ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
ds.setPassword(env.getProperty("spring.datasource.password"));
ds.setUsername(env.getProperty("spring.datasource.username"));
ds.setInitialSize(2);//初始化时建立物理连接的个数
ds.setMaxActive(20);//最大连接池数量
ds.setMinIdle(0);//最小连接池数量
ds.setMaxWait(60000);//获取连接时最大等待时间,单位毫秒。
ds.setValidationQuery("SELECT 1");//用来检测连接是否有效的sql
ds.setTestOnBorrow(false);//申请连接时执行validationQuery检测连接是否有效
ds.setTestWhileIdle(true);//建议配置为true,不影响性能,并且保证安全性。
ds.setPoolPreparedStatements(false);//是否缓存preparedStatement,也就是PSCache
return ds;
}
/**
* 事务:配置DataSourceTransactionManager
* @param dataSource
* @return
*/
@Bean("dataSourceTransactionManager")
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
6.controller控制层测试:
package com.stu.controller;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Deployment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ActivitiController {
@Autowired
private RepositoryService repositoryService;
@RequestMapping("/deploy")
public String deploy() {
Deployment deployment = repositoryService.createDeployment()
.name("demoDeployment")
.addClasspathResource("processes/Demo.bpmn")
.addClasspathResource("processes/Demo.png")
.deploy();
System.out.println("部署Id: " + deployment.getId());
System.out.println("部署名称: " + deployment.getName());
return "部署成功";
}
}
其实,在程序启动时springboot会自动部署。
其他封装可以参考https://blog.csdn.net/qq_33698579/article/details/80362864。
文章浏览阅读353次。SpringBoot日志_spring boot关闭控制台日志
文章浏览阅读452次,点赞3次,收藏6次。资源下载与技术交流本文所展示的自动驾驶中的移动目标提取与跟踪技术,全过程的代码以及相应的数据资源,详见下方链接。链接:https://pan.baidu.com/s/1Y_d5qb91bD-ZHXqRbBVN0g 提取码:pv2x相关联的,技术讨论,详见下方链接。若谷:自动驾驶行业交流群及公约zhuanlan.zhihu.com本篇技术报告,以自动驾驶中的车辆识别为例说明。各个步骤的主要操作以及..._层位追踪算法matlab
文章浏览阅读485次,点赞2次,收藏2次。StackPanel 自身可以嵌套使用,嵌套在其他布局控件中,和其他布局控件结合使用。定义一个区域,从中可以按相对位置水平或垂直排列各个子元素,支持让元素简单地停靠在整个面板的某一条边上,然后拉伸元素以填满全部宽度或高度。EditingMode:None(初始化)、Ink(画笔)、GestureOnly(响应墨迹)、Select(选择)、EraseByPoint(橡皮)、EraseByStroke(清除线段)将子元素排列成水平或垂直的一行,如果超出将换行或者换列进行显示,子元素超出部分,会被截取被隐藏。_wpf 布局控件
文章浏览阅读88次。开发语言:Java使用框架:spring boot前端技术:JavaScript、VUE.js(2.X)、css3数据库:MySQL 5.7数据库管理工具:Navicat或sqlyog开发工具:IDEA或Ecplise这里主要是对系统设计实现进行描述,通过系统的设计和数据库的设计,通过编码后变成了可以进行操作的界面,让一切想法变成了结果,通过文字和具体程序操作界面的截图之间的配合,可以把功能更直观的描述起来。_社区物业管理系统springboot
文章浏览阅读662次。按Ctrl + A选中文件夹里所有的文件,再按一下 F2 键,此时第一个文件名会变成可编辑状态,输入任意一个名称,回车确定后所有文件都会自动改成同一名称+数字序号的形式。如下图:当然,或许你不喜欢看到数字两边的括号,但如果一个一个手动去掉,几十个文件还勉强凑合,上千个的话……怎么办?将下面的代码粘贴到一个空白的文本文件,然后把这个文本文件后缀名txt改为bat,放到图片所在文件夹下双击运行_批量改文件名 win7
文章浏览阅读943次。蟠桃记问题描述 :喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题!什么问题?他研究的问题是蟠桃一共有多少个!不过,到最后,他还是没能解决这个难题,呵呵^-^当时的情况是这样的:第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,_c++ 蟠桃记
文章浏览阅读2.6k次,点赞3次,收藏7次。下载地址:Download PostgreSQL安装步骤:选择要安装的路径, 此处为你的postgres软件等安装路径,建议非C盘设置你的密码 要记住你设置的密码哦端口默认即可这里我推荐C, 也可以默认报错!然后一路Next就可以了, 但是突然进度条到了最后, 报了这个错误!意思是数据库服务项启动失败解决报错我们排查一下, win+R, 输入 services.msc找到postgres服务项发现启动也启动不了,找不到本..._failed to start the database server
文章浏览阅读2.4w次,点赞10次,收藏21次。搭建编译环境的时候,安装g++出现了如下的报错:Do you want to continue? [Y/n] yErr:1 http://cn.archive.ubuntu.com/ubuntu xenial/main amd64 libmpc3 amd64 1.0.3-1 Temporary failure resolving 'cn.archive.ubuntu.com'Err:2 ..._openssh-client amd64 1:8.9p1-3ubuntu0.4 temporary failure resolving 'cn.arch
文章浏览阅读406次,点赞3次,收藏13次。一、常用对象操作:除了一般windows窗口的常用功能键外。1、!dir 可以查看当前工作目录的文件。 !dir& 可以在dos状态下查看。2、who 可以查看当前工作空间变量名, whos 可以查看变量名细节。3、功能键:功能键 快捷键 说明方向左键 Ctrl+B 光标向后移一个字符方..._matlab机器学习中常用的函数命令
文章浏览阅读446次。联邦可视化框架可视化模型联邦可视化框架联邦学习面临挑战参考文献联邦可视化框架是联邦学习框架在可视化领域的拓展应用,能够在不进行数据整合的情况下,数据不离开客户端本地,针对具体任务和特定场景进行加密训练,得出反映全体数据特征的可视化模型。数据的全面与否将直接影响数据可视化分析结果的准确性。可视化模型将数据信息映射成可视化元素。可视化元素组成:可视化空间、标记和视觉通道。数据由属性和值构成,属性与标记对应,值与视觉通道对应。标记是数据属性到可视化元素的映射,用以直观地表示数据的属性归类;视觉通道是_联邦学习结果可视化
文章浏览阅读1.4k次。之前在做ONVIF Profile S的服务器端,用的是C++, 新的项目要使用H265,新的支持H265的协议Profile T已经发布(应该是2018年9月左右)。就准备用C语言重新写一套,目前主体框架和主要功能已经实现完成,记录下开发过程中注意事项。开发之前需要了解的和准备的。PC客户端方面,ONVIF Device Manager不支持Profile T和H265, 可以用来调试..._c语言 onvif服务端
文章浏览阅读1.2w次,点赞12次,收藏11次。matlab下可以很方便地处理语音信号,里面封装了很多函数,例如enframe等。这就需要使用Voicebox包了。但是默认情况下是,没有自动安装这个包的。 所以当我们调用enframe这些函数时,会出现,Undefined function or variable 'enframe'.这类错误。 最简单的解决方法是,下载一个voicebox语音处理包,下载地址:点这里 没_matlab中enframe函数未定义