• 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的各服务组件来使用。

  • 相关阅读:
    手下有个人总是用一些小的缺点来否认你的决定的优点,如何解决这个问题? (转载)
    初等代数
    全民上网到全民织网 Web 2.0掀起人民战争
    这个sql语句:列出各门课程成绩最好的两位学生?
    在XML中发送二进制数据
    .NetFramework 数据保存与传输之序列化对象
    Duwamish学习之构架篇错误捕获
    在.NET环境中使用单元测试工具NUnit
    [翻译]XNA外文博客文章精选之fourteen
    [翻译]XNA外文博客文章精选之nine
  • 原文地址:https://www.cnblogs.com/chengxuxiaoyuan/p/13699256.html
Copyright © 2020-2023  润新知