flowable引擎类与引擎配置类(1)

1. 导报

        <!-- https://mvnrepository.com/artifact/org.flowable/flowable-engine -->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-engine</artifactId>
            <version>6.4.0</version>
        </dependency>

        <!-- dbpool的jar -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.2</version>
        </dependency>

        <!-- mysql驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.28</version>
        </dependency>

        <!-- Logging 日志相关-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

 2. 配置flowable.conf.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="url">
            <value>
            jdbc:mysql://127.0.0.1:3306/flowable? 
            useUnicode=true&amp;characterEncoding=UTF-8
            </value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password" value="admin"/>
    </bean>

    <bean id="processEngineConfiguration"       
      class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">

        <property name="dataSource" ref="dataSource"></property>
        <!-- Database configurations -->
        <property name="databaseSchemaUpdate" value="true"/>
            <property name="databaseType" value="mysql"></property>
        </property>
    </bean>


</beans>

3. 日志配置文件

log4j.rootLogger=INFO, stdout

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

# Custom tweaks
log4j.logger.com.codahale.metrics=WARN
log4j.logger.com.ryantenney=WARN
log4j.logger.com.zaxxer=WARN
log4j.logger.org.apache=WARN
log4j.logger.org.hibernate=WARN
log4j.logger.org.hibernate.engine.internal=WARN
log4j.logger.org.hibernate.validator=WARN
log4j.logger.org.springframework=WARN
log4j.logger.org.springframework.web=WARN
log4j.logger.org.springframework.security=WARN
log4j.logger.org.flowable.engine.impl.persistence.entity=DEBUG
log4j.logger.org.flowable.task.service.impl.persistence.entity=DEBUG
log4j.logger.org.flowable.variable.service.impl.persistence.entity=DEBUG
log4j.logger.org.flowable.identitylink.service.impl.persistence.entity=DEBUG

log4j.logger.org.flowable.job.service.impl.persistence.entity=DEBUG

4. 流程引擎获取一些服务类

        processEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println("流程引擎类:" + processEngine);
        RepositoryService repositoryService = processEngine.getRepositoryService();
        System.out.println(repositoryService);
        String name = processEngine.getName();
        System.out.println("流程引擎的名称:" + name);
        DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();
        System.out.println(dynamicBpmnService);
        FormService formService = processEngine.getFormService();
        System.out.println(formService);

        HistoryService historyService = processEngine.getHistoryService();
        System.out.println(historyService);
        IdentityService identityService = processEngine.getIdentityService();
        System.out.println(identityService);
        ManagementService managementService = processEngine.getManagementService();
        System.out.println(managementService);
        ProcessEngineConfiguration processEngineConfiguration =         
            processEngine.getProcessEngineConfiguration();
        System.out.println(processEngineConfiguration);
        RuntimeService runtimeService = processEngine.getRuntimeService();
        System.out.println(runtimeService);
        TaskService taskService = processEngine.getTaskService();
        System.out.println(taskService);

5. 相关服务类的职责

6. 流程引擎类以及服务类的获取流程

flowable创建引擎类源码分析请点击

7. 获取flowable.conf.xml文件中的bean

        Map<Object, Object> beans = processEngineConfiguration.getBeans();
        Object testA = beans.get("testA");
        System.out.println(testA);
        boolean testA1 = beans.containsKey("testA");
        System.out.println("是否包含testA:" + testA1);
        Object dataSource = beans.containsKey("dataSource");
        System.out.println("是否包含dataSource:" + dataSource);
        Object dataSource1 = beans.containsKey("dataSource1");
        System.out.println("是否包含dataSource1:" + dataSource1);

flowable添加bean原理

8. 流程实例化逻辑(创建ProcessEngine)

public ProcessEngine buildProcessEngine() {
        //调用init()初始化引擎配置类中的属性
        init();
        //实例化ProcessEngineImpl
        ProcessEngineImpl processEngine = new ProcessEngineImpl(this);

        // 检查是否使用Activiti或者flowable5版本
        if (flowable5CompatibilityEnabled && flowable5CompatibilityHandler != null) {
            commandExecutor.execute(new Command<Void>() {
                @Override
                public Void execute(CommandContext commandContext) {
                    flowable5CompatibilityHandler.getRawProcessEngine();
                    return null;
                }
            });
        }
        //检查是否使用流程实例相关数量记录
        postProcessEngineInitialisation();

        return processEngine;
}

第二步实例化相关类:

public ProcessEngineImpl(ProcessEngineConfigurationImpl processEngineConfiguration) {
            //服务类属性填充
            this.processEngineConfiguration = processEngineConfiguration;
            this.name = processEngineConfiguration.getEngineName();
            this.repositoryService = processEngineConfiguration.getRepositoryService();
            this.runtimeService = processEngineConfiguration.getRuntimeService();
            this.historicDataService = processEngineConfiguration.getHistoryService();
            this.identityService = processEngineConfiguration.getIdentityService();
            this.taskService = processEngineConfiguration.getTaskService();
            this.formService = processEngineConfiguration.getFormService();
            this.managementService = processEngineConfiguration.getManagementService();
            this.dynamicBpmnService = processEngineConfiguration.getDynamicBpmnService();
            this.asyncExecutor = processEngineConfiguration.getAsyncExecutor();
            this.asyncHistoryExecutor = processEngineConfiguration.getAsyncHistoryExecutor();
            this.commandExecutor = processEngineConfiguration.getCommandExecutor();
            this.sessionFactories = processEngineConfiguration.getSessionFactories();
            this.transactionContextFactory = processEngineConfiguration.getTransactionContextFactory();
            //根据databaseSchemaUpdate执行不同逻辑
            if (processEngineConfiguration.getSchemaManagementCmd() != null) {
                commandExecutor.execute(processEngineConfiguration.getSchemaCommandConfig(), processEngineConfiguration.getSchemaManagementCmd());
            }

        if (name == null) {
            LOGGER.info("default ProcessEngine created");
        } else {
            LOGGER.info("ProcessEngine {} created", name);
        }
        //注册当前流程实例对象
        ProcessEngines.registerProcessEngine(this);

        //触发流程引擎生命周期监听器  
        if (processEngineConfiguration.getProcessEngineLifecycleListener() != null) {
            processEngineConfiguration.getProcessEngineLifecycleListener().onProcessEngineBuilt(this);
        }

 //转发事件  
  processEngineConfiguration.getEventDispatcher().dispatchEvent(FlowableEventBuilder.createGlobalEvent(FlowableEngineEventType.ENGINE_CREATED));
        //判断是否要开启异步执行器
        if (asyncExecutor != null && asyncExecutor.isAutoActivate()) {
            asyncExecutor.start();
        }
        if (asyncHistoryExecutor != null && asyncHistoryExecutor.isAutoActivate()) {
            asyncHistoryExecutor.start();
        }
}

9. DDL版本执行逻辑

    databaseSchemaUpdate的值

//第一步
if (processEngineConfiguration.getSchemaManagementCmd() != null) {
                commandExecutor.execute(processEngineConfiguration.getSchemaCommandConfig(), processEngineConfiguration.getSchemaManagementCmd());
}
//第二部
public void initSchemaManagementCommand() {
        if (schemaManagementCmd == null) {
            if (usingRelationalDatabase && databaseSchemaUpdate != null) {
                this.schemaManagementCmd = new SchemaOperationsProcessEngineBuild();
            }
        }
}
//第三部
public Void execute(CommandContext commandContext) {
        
        SchemaManager schemaManager = CommandContextUtil.getProcessEngineConfiguration(commandContext).getSchemaManager();
        String databaseSchemaUpdate = CommandContextUtil.getProcessEngineConfiguration().getDatabaseSchemaUpdate();
        
        LOGGER.debug("Executing schema management with setting {}", databaseSchemaUpdate);
        //进行逻辑判断
        if (ProcessEngineConfiguration.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate)) {
            try {
                schemaManager.schemaDrop();
            } catch (RuntimeException e) {
                // ignore
            }
        }
        if (ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP.equals(databaseSchemaUpdate)
                || ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate) || ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE.equals(databaseSchemaUpdate)) {
            schemaManager.schemaCreate();

        } else if (ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE.equals(databaseSchemaUpdate)) {
            schemaManager.schemaCheckVersion();

        } else if (ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE.equals(databaseSchemaUpdate)) {
            schemaManager.schemaUpdate();
        }
        
        return null;
}

10. 手动方式引擎配置类构造引擎

  //方法1
 public void buildEngine1() {

        ProcessEngineConfiguration standaloneProcessEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
        standaloneProcessEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
        standaloneProcessEngineConfiguration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/shareniu-idm?useUnicode=true&amp;characterEncoding=UTF-8");
        standaloneProcessEngineConfiguration.setJdbcUsername("root");
        standaloneProcessEngineConfiguration.setJdbcPassword("123");
        processEngine = standaloneProcessEngineConfiguration.buildProcessEngine();
        System.out.println(processEngine);

    }

//方法2
    public void buildEngine2() {
        StandaloneProcessEngineConfiguration standaloneProcessEngineConfiguration = new StandaloneProcessEngineConfiguration();
        standaloneProcessEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
        standaloneProcessEngineConfiguration.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/shareniu-idm?useUnicode=true&amp;characterEncoding=UTF-8");
        standaloneProcessEngineConfiguration.setJdbcUsername("root");
        standaloneProcessEngineConfiguration.setJdbcPassword("123");
        processEngine = standaloneProcessEngineConfiguration.buildProcessEngine();
        System.out.println(processEngine);

    }

//方法3
    public void buildEngine3() {
        InputStream inputStream = ProcessEngineTest.class.getClassLoader().getResourceAsStream("flowable.cfg.xml");
        ProcessEngineConfiguration processEngineConfigurationFromInputStream = ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream);
        processEngine = processEngineConfigurationFromInputStream.buildProcessEngine();
        System.out.println(processEngine);
    }

//方法4
    public void buildEngine4() {
        InputStream inputStream = ProcessEngineTest.class.getClassLoader().getResourceAsStream("flowable.cfg.xml");
        String beanName="processEngineConfiguration1";
        ProcessEngineConfiguration processEngineConfigurationFromInputStream = ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream,beanName);
        processEngine = processEngineConfigurationFromInputStream.buildProcessEngine();
        System.out.println(processEngine);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值