activiti源码-2-ProcessEngineConfigurationImpl初始化

        ProcessEngineConfigurationImpl.init方法中,第一个初始化的工作是initConfigurators,对引擎配置信息进行初始化,这里activiti允许我们自定义配置器,在初始化前后做一些自定义的配置工作。

protected void init() {
      initConfigurators();
      configuratorsBeforeInit();
       ......
      configuratorsAfterInit();
  }

        initConfigurators方法中会加载1、默认的Configurator,  当前使用的activiti版本5.22.0,默认打开了jmx功能,activiti-jmx中org.activiti.management.jmx.JMXConfigurator类会被作为默认的配置器初始化到成员变量configurators中;2、通过ServiceLoader加载我们自定义的Configurator或者在spring中配置configurators属性,需要实现ProcessEngineConfigurator接口,根据需要实现beforeInit、configure和设置权重Priority。这两类Configurator会被集合到一个list中(allConfigurators),通过权重进行升序排序,系统默认权重10000,我们可以按照实际需求组织Configurator们的运行顺序。

        configuratorsBeforeInit方法中,依次遍历排序后的allConfigurators,实际运行每个Configurator的beforeInit方法:

  protected void configuratorsBeforeInit() {
      for (ProcessEngineConfigurator configurator : allConfigurators) {
          log.info("Executing beforeInit() of {} (priority:{})", configurator.getClass(), configurator.getPriority());
          configurator.beforeInit(this);
      }
  }

        在init方法最后,初始化工作的结尾,调用configuratorsAfterInit方法,一次遍历排序后的allConfigurators,实际运行每个Configurator的configure方法:

  protected void configuratorsAfterInit() {
      for (ProcessEngineConfigurator configurator : allConfigurators) {
          log.info("Executing configure() of {} (priority:{})", configurator.getClass(), configurator.getPriority());
          configurator.configure(this);
      }
  }

应用:

processEngineConfiguration中可以设置activiti字体,可以设置为"宋体"、"微软雅黑"等,项目中遇到字体问题,客户的环境中安装中文字体库有缺失,这里可以在初始化之前做一个字体校验。

1、继承AbstractProcessEngineConfigurator抽象类,实现beforeInit方法:

    public void beforeInit(ProcessEngineConfigurationImpl processEngineConfiguration) {
            
        //获取系统中可用的字体的名字       
        GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fNames = e.getAvailableFontFamilyNames();    
        Map<String,String> fMap = new HashMap<String,String>();   
        for (int i = 0; i < fNames.length; i++) {
            fMap.put(fNames[i],"1");
         }
        if(fMap.get("宋体")!=null){
            processEngineConfiguration.setActivityFontName("宋体");
            processEngineConfiguration.setLabelFontName("宋体");
        }else if(fMap.get("黑体")!=null){
            processEngineConfiguration.setActivityFontName("黑体");
            processEngineConfiguration.setLabelFontName("黑体");
        }else{
            // other 判断 or 抛出异常
        }
        System.out.println("自定义Configurator被执行------");
  }

2、设置权重

public int getPriority() {
return 10001;
}

3、在spring中配置Configurator

    <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
        <property name="processEngineName" value="spring"></property>
        <property name="dataSource" ref="dataSource" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="databaseSchemaUpdate" value="true" />
        <property name="jobExecutorActivate" value="false" />
        <!-- <property name="history" value="none"></property> -->
        <property name="dbIdentityUsed" value="false"></property>
        <property name="asyncExecutorEnabled" value="true" />  
        <property name="asyncExecutorActivate" value="true" />
        <property name="configurators">
            <list>        
                   <bean class="com.xxx.MyConfiguration"></bean>        
            </list>
        </property>

    </bean>

4、启动tomcat,能看到输出信息

六月 10, 2018 9:03:10 下午 org.apache.catalina.core.ApplicationContext log
信息: No Spring WebApplicationInitializer types detected on classpath
六月 10, 2018 9:03:10 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
自定义Configurator被执行------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值