activiti學習8:springboot2.0整合activiti5


activiti學習8:springboot2.0整合activiti5

本文記錄下如何整合activiti5.22.0和springboot2.0.1

因為版本問題,直接使用activiti5提供的activiti-spring-boot-starter-basic是不能整合springboot2.0的。

一、整合原理

springboot應用本質上也是一個spring應用,只不過簡化了許多配置,有許多配置工作都通過起步依賴自動進行了。所以不能自動配置的時候我們就可以通過手動配置來完成。回憶下activiti如何和spring整合:在spring的配置文件中依次配置如下的bean

(1)數據源(連接池)

(2)事務管理器(和spring整合后必須配置事務管理器)

(3)流程引擎配置對象,這里可以注入一些流程引擎的配置

(4)流程引擎對象

(5)activiti的服務組件,配置后在程序中可以直接從容器中獲取

同樣的,在springboot中我們也可以自己手動配置這些bean,讓框架幫我們創建這些bean,完成整合,在應用中直接獲取這些bean

二、具體實現

首先引入activiti的spring模塊的依賴

<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring</artifactId>
            <version>5.22.0</version>
</dependency>

引入這個依賴后就不需要再引入activiti和springboot整合的那個starter了,所有bean的配置全部手動完成。

在springboot中要配置一個bean很簡單,可以單獨定義一個配置類,也可以直接在啟動類中使用@Bean注解進行配置。

(1)連接池,連接池對象可以自己配置一個,也可以直接在啟動類中用@Autowired注入springboot提供的

(2)事務管理器,處理方式和連接池一樣

(3)流程引擎配置對象:配置activiti的spring模塊提供的SpringprocessEngineConfiguration類的對象作為流程引擎配置bean

(4)流程引擎對象:使用activiti的spring模塊提供的ProcessEngineFactoryBean,它用來維護一個ProcessEngine實例,向它注入一個流程引擎配置對象,就會自動創建ProcessEngine。在得到spring上下文后,通過getBean方法獲取的ProcessEngineFactoryBean的bean,實際上得到的是一個ProcessEngine實例。

(5) 各服務組件可通過流程引擎對象獲得

在配置類中具體的配置方式如下

	
@SpringBootApplication
public class ActivitiTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(ActivitiTestApplication.class);
    }

    //事務管理器
    @Autowired
    private PlatformTransactionManager platformTransactionManager;

    //連接池
    @Autowired
    private DataSource dataSource;

    /**
     * 流程引擎配置對象
     * @return
     */
    @Bean
    public SpringProcessEngineConfiguration processEngineConfiguration(){
        SpringProcessEngineConfiguration processEngineConfiguration=new SpringProcessEngineConfiguration();
        processEngineConfiguration.setDataSource(dataSource);
        processEngineConfiguration.setTransactionManager(platformTransactionManager);
        processEngineConfiguration.setDatabaseSchemaUpdate("true");
        processEngineConfiguration.setActivityFontName("宋體");
        processEngineConfiguration.setLabelFontName("宋體");
        return processEngineConfiguration;
    }

    /**
     * 流程引擎對象的bean
     * @param processEngineConfiguration
     * @return
     */
    @Bean
    public ProcessEngineFactoryBean processEngine(@Qualifier("processEngineConfiguration") SpringProcessEngineConfiguration processEngineConfiguration){
        ProcessEngineFactoryBean processEngineFactoryBean=new ProcessEngineFactoryBean();
        processEngineFactoryBean.setProcessEngineConfiguration(processEngineConfiguration);
        return processEngineFactoryBean;
    }

    //以下幾個為activiti的服務組件對應的bean
    @Bean
    public RepositoryService repositoryService(@Qualifier("processEngine") ProcessEngine processEngine){
        return processEngine.getRepositoryService();
    }

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

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

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

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

這樣就完成了springboot2和activiti5的整合,在你的應用中就可以直接注入activiti的各服務組件來使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM