自定义ProcessEngineConfiguration

了解ProcessEngineConfiguration的属性配置及其作用,可以使我们定制出个性化的流程引擎。如果想进一步对流程引擎做更个性化的定制,可以为ProcessEngineConfiguration配置不同的实现。

 

ProcessEngineConfiguration及其子类

ProcessEngineConfiguration代表Activiti的一个配置实例,ProcessEngineConfiguration本身是一个抽象类,因此要配置bean需要知道它的子类。在定制自己的ProcessEngineConfiguration之前,我们先来了解它及其几个子类:

自定义ProcessEngineConfiguration_第1张图片

如上图所示,ProcessEngineConfiguration是全部配置类的父类,它有一个ProcessEngineConfigurationImpl子类,这个子类也是个抽象类,在这三个子类下面又有三个直接子类。

org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration:使用该类作为配置对象,Activiti将会对事务进行管理,默认情况下,流程引擎启动时会检查数据库结构以及版本是否正确。

org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration:该类同样由Activiti进行事务管理,但是该类设置了databaseSchemaUpdate(create-drop)和jdbcUrl(jdbc:h2:mem:activiti)属性,以便可以在单元测试中使用。

org.activiti.spring.SpringProcessEngineConfiguration:当Activiti与Spring进行整合时,可以使用该类。

org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration:不使用Activiti的事务,使用JTA进行事务管理。

 

自定义ProcessEngineConfiguration

如果我们想自定义一个ProcessEngineConfiguration抽象类可以选择继承ProcessEngineConfiguration或者它的直接子类ProcessEngineConfigurationImpl。

继承ProcessEngineConfiguration类需要实现buildProcessEngine方法,继承ProcessEngineConfigurationImpl需要实现getDefaultCommandInterceptorsTxRequired和getDefaultCommandInterceptorsTxRequiresNew方法。如果需要添加自定义属性,可以为自己的ProcessEngineConfiguration类添加属性,并且添加相应的setter方法。

public class MyProcessEngineConfiguration extends ProcessEngineConfigurationImpl {
    public MyProcessEngineConfiguration() {
        // 自定义设置
    }
    //定义了一个userName测试属性,需要在processEngineConfiguration注入
    private String userName;
   
     public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserName() {
        return this.userName;
    }
    @Override
    protected CommandInterceptor createTransactionInterceptor() {
        return new MyInterceptorA();
    }


    @Override
    protected Collection getDefaultCommandInterceptors() {
        List interceptors = new ArrayList();
        interceptors.add(new LogInterceptor());
        CommandInterceptor transactionInterceptor = createTransactionInterceptor();
        if(transactionInterceptor!=null) {
            interceptors.add(transactionInterceptor);
        }
        interceptors.add(new MyInterceptorB());
        interceptors.add(new CommandContextInterceptor(commandContextFactory,this));
        return interceptors;
    }
}

 

 

 

 

 

 

 

 

你可能感兴趣的:(Activiti02.,Activiti流程引擎,Activiti从理论到实战)