springboot2+整合activiti7 常见问题

一,在系统原有基础(springboot2.0 +shiro )上整合activiti7 

1,添加activiti7工作流依赖 


   org.activiti
   activiti-spring-boot-starter
   7.0.0.Beta2

2,由于activiti7 内置安全架构为Spring Security,且现有项目使用的是shiro安全框架,因此需要排除Spring Security :

只需要在项目启动类上添加如下代码即可

 

/**
 * 启动类注解添加exclude排除 activiti 内置Spring Security,用以整合Shiro安全框架
 */
@SpringBootApplication(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
      org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
   })
public class AdminApplication extends SpringBootServletInitializer {

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(AdminApplication.class);
   }

   public static void main(String[] args) {
      SpringApplication.run(AdminApplication.class, args);
   }

}

3,解决 springboot2.0 整合activiti7 时 数据库中历史表创建失败为题的解决

 在applcation.yml 文件中的  spring 配置下添加以下配置即可,  

activiti:              #springboot2.0 整合activiti7 解决数据库历史表写不进问题
  db-history-used: true
  history-level: full

4,代码案例

 

  

public class ActivitiControllerTest {

    //注入流程引擎
    @Autowired
    private ProcessEngine processEngine;
    //注入运行任务
    @Autowired
    private TaskRuntime taskRuntime;

    //流程部署
    @Test
    public void testActiviti() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("diagram/holiday.bpmn")
                .addClasspathResource("diagram/holiday.png")
                .name("请假流程")
                .deploy();

        System.out.println(deploy.getId());       //流程定义id
        System.out.println(deploy.getName());     //流程定义名称

    }


    //流程定义文件查询
    @Test
    public void getProcessResources() throws IOException {
        //流程部署id
        String deploymentId = "e02d7f78-2b69-11ea-a0ee-0e017c0d5d57";
        // 通过流程引擎获取repositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //读取资源名称
        List resources = repositoryService.getDeploymentResourceNames(deploymentId);
        String resource_image = null;
        //获取图片
        for (String resource_name : resources) {
            if (resource_name.indexOf(".png") >= 0) {
                resource_image = resource_name;
            }
        }


        //图片输入流
        InputStream inputStream = repositoryService.getResourceAsStream(deploymentId, resource_image);
        File exportFile = new File("d:/holiday.png");
        FileOutputStream fileOutputStream = new FileOutputStream(exportFile);
        byte[] buffer = new byte[1024];
        int len = -1;
        //输出图片
        while ((len = inputStream.read(buffer)) != -1) {
            fileOutputStream.write(buffer, 0, len);
        }
        inputStream.close();
        fileOutputStream.close();
    }


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

        //2.得到RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();

        //3.流程定义的key问题   myProcess_1
        String key = "myProcess_1";
        Map map = new HashMap<>();

        Holiday holiday = new Holiday();
        holiday.setNum(3F);
        map.put("holiday", holiday);

        map.put("assignee", "zhangsan");
        map.put("assignee1", "lishi");
        map.put("assignee2", "wangwu");
        map.put("assignee3", "zhaoliu");

        //4.启动流程实例,并且设置流程变量的值   可设置BussnessKey
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(key, map);
        // runtimeService.startProcessInstanceByKey()

        //5.输出实例信息
        System.out.println(processInstance.getName());
        System.out.println(processInstance.getProcessDefinitionId());
    }
    //查询任务

    /*
     * 输出结果
     * 流 程 实 例 id : 6334af92-2de1-11ea-88c0-fc017c0d5d58
    任务id:633aa313-2de1-11ea-88c0-fc017c0d5d58
    任务负责人:zhangsan
    任务名称:填写请假申请单
    *
    *
    * 流 程 实 例 id : 6334af92-2de1-11ea-88c0-fc017c0d5d58
    *  任务id:1da1079a-302f-11ea-8a16-fc017c0d5d58
    *  任务负责人:lishi
    * 任务名称:部门经理审批
    *
    *
    * 流 程 实 例 id : 6334af92-2de1-11ea-88c0-fc017c0d5d58
    * 任务id:c1a455b4-302f-11ea-b956-fc017c0d5d58
    * 任务负责人:wangwu
    *  任务名称:总经理审批
    * */


    @Test
    public void findPersonalTaskList() {
        //String assignee = "zhangsan";
        //String assignee = "lishi";
       // String assignee = "wangwu";
        String assignee = "zhaoliu";
        TaskService taskService = processEngine.getTaskService();
        List list =
                taskService.createTaskQuery().
                        processDefinitionKey("myProcess_1").
                        taskAssignee(assignee).list();

        for (Task task : list) {
            System.out.println(" 流 程 实 例 id : " + task.getProcessInstanceId());
            System.out.println("任务id:" + task.getId());
            System.out.println("任务负责人:" + task.getAssignee());
            System.out.println("任务名称:" + task.getName());

        }
    }


    //完成任务
    @Test
    public void compeleteTask() {
        String taskid = "c1a455b4-302f-11ea-b956-fc017c0d5d58";
        TaskService taskService = processEngine.getTaskService();
        taskService.complete(taskid);
        System.out.println("完成任务");
    }
}

 

有想要沟通 共同学习,一起进步的的朋友可联系本人邮箱 [email protected] 

你可能感兴趣的:(java,工作流)