Activiti 5.12用户指南之配置信息

 

一、创建一个ProcessEngine
     Activiti的流程引擎是通过activiti.cfg.xml这个文件进行配置的。这种方式区别于你用spring的方式去创建一个流程引擎。那么,关于用spring的方式去创建流程引擎,我们后面再讲。
     获得一个ProcessEngine最简单的方式,是用org.activiti.engine.ProcessEngine这个类。
 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        
       它会自己在classpath中寻找activiti.cfg.xml这个文件,并且根据文件中的配置去构造一个引擎。下面的代码片段显示了一个配置的例子。也给你展示了一个详细的配置属性。
       
<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="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
  
    <property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
    <property name="jdbcDriver" value="org.h2.Driver" />
    <property name="jdbcUsername" value="sa" />
    <property name="jdbcPassword" value="" />
    
    <property name="databaseSchemaUpdate" value="true" />
    
    <property name="jobExecutorActivate" value="false" />
    
    <property name="mailServerHost" value="mail.my-corp.com" /> 
    <property name="mailServerPort" value="5025" />    
  </bean>

</beans>
 
          实际上,这个XML的配置信息,是一个Spring的配置信息。但是 这不意味着Activiti只能应用在Spring的环境中。通过spring的依赖注入,我们能够很简单的生成一个引擎。 
          ProcessEngineConfiguration这个对象,也能用配置文件去编程创建。也能用一个不同的bean的Id去创建。
          
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource);
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);
 
          不用配置文件,默认的也能获得一个ProcessEngineConfiguration这个对象。
          
ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
 

          所有的这些ProcessEngineConfiguration.getXXX()方法都返回一个ProcessEngineConfiguration对象。在调用buildProcessEngine()操作之后,一个ProcessEngine对象被创建。
          
ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()
  .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
  .setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
  .setJobExecutorActivate(true)
  .buildProcessEngine();
 
二、ProcessEngineConfiguration实体 
      activiti.cfg.xml这个文件必须包含一个id是processEngineConfiguration的实体。
      
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
 
      这个bean实体会被用于构造ProcessEngine对象。有不止一个类能够定义这processEngineConfiguration。这些类代表着不同的使用环境和一些默认的设置。选择一个尽可能匹配你的环境的类,通过减少属性的数量去配置一个引擎是最好的一种练习。下面的这些类是能直接获取得到的。
  • org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration:这个流程引擎被用于标准的方式。Activiti会留意到事物。
  • org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration:这是一个为单元测试来说很方便的一个类。Activiti会留意到事物。默认使用一个H2 类型的内存的数据库。当引擎被初始化或者关闭的时候,这个数据库也会被创建或者消除。当用这个类的时候,通常来说不用额外的配置。
  • org.activiti.spring.SpringProcessEngineConfiguration:用于在spring环境中的创建流程引擎。
  • org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration:当引擎运行在单机模式和Jta事物下会被用到。
三、数据库配置          
     Activiti引擎会识别两种方式去配置数据库。第一种是定义数据库用到的JDBC 属性:
  • jdbcUrl:数据库的JDBC连接地址。
  • jdbcDriver:数据库依赖的驱动。
  • jdbcUserName:连接数据库的用户名。
  • jdbcPassword:连接数据库的密码。
     根据提供的JDBC属性会构造一个数据源,这个数据源会有一个默认的MyBatis连接池。下面的属性能选择性的设置连接池。
  • jdbcMaxActiveConnections:连接池在任何时候能包含的最大活动数量,默认值是10。
  • jdbcMaxIdleConnections:连接池中能够存在的最大空闲连接数。
  • jdbcMaxCheckoutTime:
  • jdbcMaxWaitTime:这是一个级别很低的设置。它能让连接池打印日志,并且能够在比平时连接时间长的时候,再试图获取一个连接。
     数据库配置的例子:
     
<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
 
     另外,javax.sql.DataSource的实现类也能用于创建数据库.
 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
  <property name="driverClassName" value="com.mysql.jdbc.Driver" />
  <property name="url" value="jdbc:mysql://localhost:3306/activiti" />
  <property name="username" value="activiti" />
  <property name="password" value="activiti" />
  <property name="defaultAutoCommit" value="false" />
</bean>      

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
  
    <property name="dataSource" ref="dataSource" />
    ...
 
     注意:Activiti没有这样一个类库会去创建一个这样的数据源,因此,你必须在你的类路径下有这样的一个类库。
        
四、支持的数据库
     列表里面展示的都是activiti支持的数据库
Activiti database type Versions tested Example JDBC URL Notes
h2 1.3.168 jdbc:h2:tcp://localhost/activiti Default configured database
mysql 5.1.21 jdbc:mysql://localhost:3306/activiti?autoReconnect=true Tested using mysql-connector-java database driver
oracle 11.2.0.1.0 jdbc:oracle:thin:@localhost:1521:xe  
postgres 8.1 jdbc:postgresql://localhost:5432/activiti  
db2 DB2 10.1 using db2jcc4 jdbc:db2://localhost:50000/activiti  
mssql 2008 using sqljdbc4 jdbc:sqlserver://localhost:1433/activiti
 
五、创建数据库的表
     最简单的创建你数据库的表的方法就是:
  • 在你的类路径下添加一个activiti-engine的诸多jar包。
  • 添加一个合适的数据库驱动。
  • 在你的类路径下添加一个activiti.cfg.xml配置文件,指向你的数据库。
  • 执行DbSchemaCreate的main方法。
然而,经常只有数据库管理员能执行DDL操作。在activiti的下载页面或者Activiti的部署包database的子文件夹里面,也会有SQL语句。这个脚本也会在引擎的jar(activiti-engine-x.jar)中,在org/activiti/db/create的包中。SQL文件会是下面的这种形式:
 
activiti.{db}.{create|drop}.{type}.sql
 
     db是任何一种activiti支持的数据库,type是
  • engine:引擎执行必备的表。
  • identity:这些表包含着用户、组和用户组的成员。当引擎需要默认的身份管理时,会选择性的用到这些表。
  • history:这一部分表包含着历史和审计信息。
六、数据库表名字的解释
     Activiti中数据库表的名字都是以ACT_开头。第二部分是两个字母用来区分不同的表。这样用也是匹配API。
  • ACT_RE_*:'RE'代表repository。有这样前缀的表包含'static'的信息,比如流程定义和流程资源(图片、规则)..。
  • ACT_RU_*:'RU'代表runtime.这些表是运行中的表,包含了流程实例中实时的数据,用户任务,变量,工作等。当流程实例执行的时候,Activiti之存储实时的数据,当一个流程实例结束的时候,会删除掉记录。这样保证了这些表小且快。
  • ACT_ID_*:'ID'代表identity。这些表包含了身份信息,比如用户、组等。
  • ACT_HI_*:'HI'代表history。这些包含了历史数据,比如过去的流程实例、变量、任务等。
  • ACT_GE_*:general 数据。这些数据用在各种各样的案例中。
七、数据库升级
     在数据库升级之前,一定要确保已经备份完成。
     通常来说,每当一个流程引擎创建,都会检查一下版本。特别是在你的应用或者Activiti应用包启动的时候经常会出现升级。如果Activiti提示你,你的库版本和数据库表的版本有区别,这时候,其实是抛了异常。
     要升级数据库,你不得不在你的activiti.cfg.xml文件中把下面的属性配置在文件的开头部分。
     
<beans ... >

  <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <!-- ... -->
    <property name="databaseSchemaUpdate" value="true" />    
    <!-- ... -->
  </bean>

</beans>
 
      因此,在你的classpath中你要选择一个合适的数据库驱动为你的数据库。在你的应用程序中升级数据库,或者启动一个新的Activiti的版本,并且要指向一个包含老版本的数据库。databaseSchemaUpdate设置为true,是指当提示类库和DB不同步时,Activiti首先会自动升级DB到你的新版本中。 
      不过你也可以通过运行升级DDL作为替代。你可以在activiti下载页面,找到数据库升级脚本,运行这个升级脚本。
 
八、计划执行器
    JobExecutor是一个管理一系列线程的组件,它会执行异步消息和定时器。对于单元测试的情况来说,它和多个线程在一起很不方便。因此,API允许通过API去查询并且执行计划,以致于计划的执行能被一个单元测试去控制。为了避免被计划执行器(JobExecutor)干扰,也能关闭它。
     默认的, 当流程引擎启动的时候,JobExecutor会被激活。详细说明如下, 
<property name="jobExecutorActivate" value="false" />
     设置为false,就是指当流程引擎启动的时候,你不想JobExecutor激活。
 
九、邮件服务配置
     配置一个邮件服务不是必须的,这个根据你自己的需要设置。Activiti支持在业务流程中发送邮件。要想实际的发送一封邮件,必须配置一个正确的SMPT邮件服务。
     下面列出的属性能够在activiti.cfg.xml文件中配置:
     
Property Required? Description
mailServerHost no The hostname of your mail server (e.g. mail.mycorp.com). Default is localhost
mailServerPort yes, if not on the default port The port for SMTP traffic on the mail server. The default is 25
mailServerDefaultFrom no The default e-mail address of the sender of e-mails, when none is provided by the user. By default this is[email protected]
mailServerUsername if applicable for your server Some mail servers require credentials for sending e-mail. By default not set.
mailServerPassword if applicable for your server Some mail servers require credentials for sending e-mail. By default not set.
mailServerUseSSL if applicable for your server Some mail servers require ssl communication. By default set to false.
     这个要结合任务进行说明,后续再详细进行讲解。
 
十、历史配置
     历史存储的配置是按照特定需求自选配置的。这需要你微调一下配置去影响对引擎的历史数据处理能力。
     
<property name="history" value="audit" />
 
十一、在表达式和脚本中暴露配置的实体类
    默认的,你在activiti.cfg.xml中配置信息指定的所有实体类,或者在你Spring自己的配置文件中所有实体类,都能用在表达式和脚本中。如果你想在你的配置文件中限制实体类的可见性,你可以在你的流程引擎中去配置一个名为bean的属性。在ProcessEngineConfiguration中,这些实体类的属性都是一个map。当你指定这个属性的时候,只有被指定的类才会对表达式或者脚本可见。这些类会以你在map中指定的名字暴漏出来。
 
十二、部署缓存配置
     所有的流程定义都是高速缓存存储器(在他们被解析之后),为了去避免和数据库冲突。因为流程定义的数据不会变化,所以每次一个流程定义的时候,都会需要到数据库。默认的,在缓存中流程定义的数量没有限制。下面的例子是告诉我们如果去限制缓存中流程定义的数量。
<property name="processDefinitionCacheLimit" value="10" />
 
十三、日志
     Activiti 5.12中,SLF4J被作为日志框架,代替了之前的java.util.logging。所有的日志(activiti/spring/mybatis...)都会经过SLF4J过滤,并且允许在你的选择的logging-implementation中进行选择。
      默认的,在activiti-engine的依赖中现在没有SFL4J-binding的jar包。为了应用这个日志框架,你需要手动添加到你的项目中
 

你可能感兴趣的:(Activiti)