spring boot整合activiti rest api详细教程

1.导入依赖

         
            org.activiti
            activiti-rest
            ${activiti.version}
            
                
                    org.slf4j
                    slf4j-api
                
                
                    org.slf4j
                    slf4j-log4j12
                
            
            true
        
        
            org.activiti
            activiti-common-rest
            true
            ${activiti.version}
        

推荐使用如下方式

    
    org.activiti
    activiti-spring-boot-starter-basic
    ${activiti.version}
    
   
   org.activiti
   activiti-spring-boot-starter-rest-api
   ${activiti.version}
    

 

2.扫描activiti rest controller所在的包

spring boot整合activiti rest api详细教程_第1张图片

图片.png

扫描org.activiti.rest就行了,会扫描下面的所有子包。

@SpringBootApplication
@ComponentScan("org.activiti.rest")
public class SpringBootWithActivitiApplication {
···

3.配置两个bean

    //rest service
    @Bean
    public RestResponseFactory restResponseFactory(){
        return new RestResponseFactory();
    }
    @Bean
    public ContentTypeResolver contentTypeResolver(){
        return new DefaultContentTypeResolver();
    }

4.使用rest api

如:
1.获取所有deployments:

GET 
/repository/deployments

response:

{
  "data": [
    {
      "id": "10",
      "name": "activiti-examples.bar",
      "deploymentTime": "2010-10-13T14:54:26.750+02:00",
      "category": "examples",
      "url": "http://localhost:8081/service/repository/deployments/10",
      "tenantId": null
    }
  ],
  "total": 1,
  "start": 0,
  "sort": "id",
  "order": "asc",
  "size": 1
}

2.根据id查询deployment

GET
/repository/deployments/{deploymentId}

response:

{
  "id": "10",
  "name": "activiti-examples.bar",
  "deploymentTime": "2010-10-13T14:54:26.750+02:00",
  "category": "examples",
  "url": "http://localhost:8081/service/repository/deployments/10",
  "tenantId" : null
}

3.根据id删除deployment

DELETE
/repository/deployments/{deploymentId}

response:
成功时,状态码为204。
4.更多的activiti rest api
https://www.activiti.org/userguide/#_rest_api

5、由于做个单独服务,activiti-rest会默认进行basic authentication,那么就需要屏蔽验证。

 在boot服务启动类里面加上这个,boot启动的时候就会屏幕,rest-client请求的时候就不会验证了

@EnableAutoConfiguration(exclude = {
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.activiti.spring.boot.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class
})

配置config scan扫描activiti-rest 的controller 接口信息

@Configuration
@ComponentScan(basePackages = { "org.activiti.rest.diagram", "org.activiti.rest"}, includeFilters = {
        @Filter(type = FilterType.ANNOTATION, classes = {
                RestController.class }) }, useDefaultFilters = false, lazyInit = false)
public class ScanConfig {

}

配置数据源信息 以及要扫描注入的activiti bean
 

/*
 * ApplicationContext ac1 =
 * WebApplicationContextUtils.getRequiredWebApplicationContext(
 * ServletContext sc); /* ApplicationContext ac2 =
 * WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
 * /* ac1.getBean("beanId"); /* ac2.getBean("beanId");
 */
@Bean(name = "ProcessEngineConfiguration")
public ProcessEngineConfiguration getProcess(@Qualifier("flowdataDataSource") DataSource dataSource) {
    ProcessEngineConfiguration configuration = ProcessEngineConfiguration
            .createStandaloneProcessEngineConfiguration();
    configuration.setDataSource(dataSource);
    configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
    configuration.buildProcessEngine();
    configuration.setActivityFontName("宋体");
    configuration.setLabelFontName("宋体");
    return configuration;
}

@Bean(name = "restResponseFactory")
public RestResponseFactory restResponseFactory() {
    return new RestResponseFactory();
}

@Bean(name = "contentTypeResolver")
public ContentTypeResolver contentTypeResolver() {
    return new DefaultContentTypeResolver();
}

@Bean(name = "processEngineConfiguration")
public ProcessEngineConfiguration processEngineConfiguration() {
    return processEngineConfiguration;
}


接下来配置七大接口数据信息


@Configuration
public class ActivitiServiceConfig {

    @Bean
    public StandaloneProcessEngineConfiguration getStandaloneProcessEngineConfiguration() {
        StandaloneProcessEngineConfiguration standaloneProcessEngineConfiguration = new StandaloneProcessEngineConfiguration();
        return standaloneProcessEngineConfiguration;
    }
    @Bean(name = "processEngine") // processEngineConfiguration
    public ProcessEngine getProsessEngien(@Qualifier("ProcessEngineConfiguration") ProcessEngineConfiguration pro) {
        return pro.buildProcessEngine();
    }

    @Bean(name = "RepositoryService")
    public RepositoryService getRepositoryService(@Qualifier("processEngine") ProcessEngine ProcessEngine) {
        return ProcessEngine.getRepositoryService();
    }

    @Bean(name = "RuntimeService")
    public RuntimeService getRuntimeService(@Qualifier("processEngine") ProcessEngine ProcessEngine) {
        return ProcessEngine.getRuntimeService();
    }

    @Bean(name = "TaskService")
    public TaskService getTaskService(@Qualifier("processEngine") ProcessEngine ProcessEngine) {
        return ProcessEngine.getTaskService();
    }

    @Bean(name = "FormService")
    public FormService getFormService(@Qualifier("processEngine") ProcessEngine ProcessEngine) {
        return ProcessEngine.getFormService();
    }

    @Bean(name = "HistoryService")
    public HistoryService getHistoryService(@Qualifier("processEngine") ProcessEngine ProcessEngine) {
        return ProcessEngine.getHistoryService();
    }

    @Bean(name = "ManagementService")
    public ManagementService getManagementService(@Qualifier("processEngine") ProcessEngine ProcessEngine) {
        return ProcessEngine.getManagementService();
    }

    @Bean(name = "IdentityService")
    public IdentityService getIdentityService(@Qualifier("processEngine") ProcessEngine ProcessEngine) {
        return ProcessEngine.getIdentityService();
    }
}


启动项目

package com;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
//import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;



@EnableHystrixDashboard
@EnableCircuitBreaker
// @EnableEurekaClient
//@EnableAutoConfiguration
@EnableDiscoveryClient
@RestController
@SpringBootApplication
@EnableTransactionManagement
// @EnableScheduling
@EnableAutoConfiguration(exclude = { org.activiti.rest.security.BasicAuthenticationProvider.class,
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class,
        org.activiti.rest.security.BasicAuthenticationProvider.class })
/*
 * @ComponentScan(basePackages = { "org.activiti.rest.diagram",
 * "org.activiti.rest" }, includeFilters = {
 * 
 * @Filter(type = FilterType.ANNOTATION, classes = { RestController.class }) },
 * useDefaultFilters = false, lazyInit = false)
 */
// 
public class App {// implements CommandLineRunner {

    @RequestMapping("/")
    public String index() {
        return "hello world at home!";
    }
    public static void main(String[] args) {
        // SpringApplication.run(App.class, args);
        new SpringApplicationBuilder(App.class).web(true).run(args);
    }
}



启动项目截图 我们发现activiti-rest 的controller 已经加载进来了 
 

springboot无法在其他表空间创建25张表,使用加载activiti.cfg.xml的方式进行创建表。

  
  
         
  
           
            
            
            
            
            
            
            
            
          
           
  
         
            
        
       
  
package com.imm.config;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
 
 
@Configuration
@ImportResource(locations={"classpath:activiti.cfg.xml"})
public class config {
 
}


启动项目,创建activiti表。
但是因为使用了xml方式加载activiti,所以无法自动发布流程定义。固加载成功之后,去除@ImportResource即可。

删除activiti表时,注意要删除SEQUENCE ACT_EVT_LOG_SEQ。
============================================================

Spring MVC集成

1.web工程已经集成进入activiti5.22版本。

2.引入jar包。


    org.activiti
    activiti-rest
    5.22.0

3.web.xml文件加入

    RestServlet
    org.springframework.web.servlet.DispatcherServlet
    
        contextConfigLocation
        classpath:conf/spring/spring-mvc-rest.xml
    


    RestServlet
    /rest/*


4.
spring-mvc-rest.xml文件内容如下:




    
    
        
    

    


5.activiti5.22的配置文件中加入如下:   

 
    

    
    
        
        
        
        
        
        

        

        
        
        
        

        
    

    
        
    
    
    
    
    
    
    
    

    
    
    
    
    

    

 

1.根据快速开始操作,创建maven工程,配置相关依赖, $actVer改为6.0.0 本例使用mysql替代h2


    org.activiti
    activiti-engine
    6.0.0


    org.slf4j
    slf4j-api
    1.7.21


    org.slf4j
    slf4j-log4j12
    1.7.21


    mysql
    mysql-connector-java
    6.0.6


2.加入配置文件/src/main/resources/log4j.properties

log4j.rootLogger=DEBUG, ACT
log4j.appender.ACT=org.apache.log4j.ConsoleAppender
log4j.appender.ACT.layout=org.apache.log4j.PatternLayout
log4j.appender.ACT.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n


3.mysql创建数据库并连接 


4.获取流程引擎对象ProcessEngine 
4.1.通过代码设置

// 引擎配置
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
        .setJdbcUrl("jdbc:mysql://localhost:3306/activiti").setJdbcUsername("root")
        .setJdbcPassword("pwd")
        .setJdbcDriver("com.mysql.jdbc.Driver")
        .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 获取流程引擎对象
ProcessEngine processEngine = cfg.buildProcessEngine();


4.2.通过activiti.cfg.xml配置文件

ProcessEngineConfiguration cfg = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResource("activiti.cfg.xml");
ProcessEngine processEngine = cfg.buildProcessEngine();


配置文件activiti.cfg.xml




    
        
        
        
        
        
    



执行后初始化数据表如下 
 
5.安装BPM插件 
5.1 IDEA搜索并安装BPM插件 Business Process Management

加入示例中的xml /src/main/resources/onboarding.bpmn20.xml 
打开xml可以看到流程图 

5.2.IDEA的BPM插件使用体检较差,建议使用eclipse插件 
安装插件 Install New Software http://activiti.org/designer/update/ 
Activiti 5.10支持直接部署扩展名为bpmn的流程文件,设计器打开如下: 

下载 
https://www.activiti.org/download-links 
快速开始 
https://www.activiti.org/quick-start 
用户指南 
https://www.activiti.org/userguide/ 
相关资料 
http://www.kafeitu.me/activiti.html 
http://blog.csdn.net/u013517797/article/category/6732665

你可能感兴趣的:(spring,boot)