新项目开始,因为以前对jbpm4比较熟悉,这次打算采用新的工作流框架,决定使用activiti5,下面是activiti5对Spring的整合
首先是lib的选择
activiti5的lib
activiti5内部采用mybatis作为持久化框架,所以还需要,mybatis的版本一定要和activiti5所用的版本对应。
activiti5内部采用的是sl4j管理日志,所以还需要
activiti5采用joda-time来处理时间
剩下的就是spring跟hibernate的依赖jar
首先是lib的选择
activiti5的lib
activiti5内部采用mybatis作为持久化框架,所以还需要,mybatis的版本一定要和activiti5所用的版本对应。
activiti5内部采用的是sl4j管理日志,所以还需要
activiti5采用joda-time来处理时间
剩下的就是spring跟hibernate的依赖jar
lib包选择好以后,开始配置applicationContext.xml
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:jee="http://www.springframework.org/schema/jee"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/jee
- http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/aop
- http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- ">
- <context:annotation-config />
- <context:component-scan base-package="org.ch01.sys"/>
- <!-- 建立数据源 -->
- <bean
- class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="locations">
- <value>classpath:jdbc.properties</value>
- </property>
- </bean>
- <!-- 配置数据库连接池(c3p0) -->
- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
- <!-- 基本信息 -->
- <property name="jdbcUrl" value="${jdbcUrl}"></property>
- <property name="driverClass" value="${driverClass}"></property>
- <property name="user" value="${username}"></property>
- <property name="password" value="${password}"></property>
- <!-- 其他配置 -->
- <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
- <property name="initialPoolSize" value="3"></property>
- <!--连接池中保留的最小连接数。Default: 3 -->
- <property name="minPoolSize" value="3"></property>
- <!--连接池中保留的最大连接数。Default: 15 -->
- <property name="maxPoolSize" value="5"></property>
- <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
- <property name="acquireIncrement" value="3"></property>
- <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
- <property name="maxStatements" value="8"></property>
- <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
- <property name="maxStatementsPerConnection" value="5"></property>
- <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
- <property name="maxIdleTime" value="1800"></property>
- </bean>
- <!-- 把数据源注入给session工厂 -->
- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
- <property name="dataSource" ref="dataSource" />
- <property name="packagesToScan">
- <list><value>org.ch01.sys.entity</value></list>
- </property>
- <!-- 配置映射文件 -->
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
- <prop key="hbm2ddl.auto">update</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.format_sql">true</prop>
- </props>
- </property>
- </bean>
- <!-- 配置事务管理器 -->
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory"/>
- <!-- 使用声明式配置事物(事务通知) -->
- <!--Spring中常用事务类型:
- REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
- SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
- MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。
- REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
- NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
- -->
- <!-- transaction-manager引用上面的事务管理器 -->
- <tx:advice id="txAdvice" transaction-manager="transactionManager">
- <tx:attributes>
- <tx:method name="*" propagation="REQUIRED"/>
- </tx:attributes>
- </tx:advice>
- <!-- 将通知应用到指定的切入点 -->
- <aop:config>
- <!--指定切入点 -->
- <aop:pointcut id="txService" expression="execution(* org.ch01.sys.service.*.*.*(..))"/>
- <!-- advice-ref引用上面的事务通知,pointcut-ref指定上面配置的切入点 -->
- <aop:advisor advice-ref="txAdvice" pointcut-ref="txService"/>
- </aop:config>
- <!-- activiti5集成spring配置 -->
- <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
- <property name="dataSource" ref="dataSource" />
- <property name="transactionManager" ref="transactionManager" />
- <property name="databaseSchemaUpdate" value="true" />
- <property name="jobExecutorActivate" value="false" />
- </bean>
- <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
- <property name="processEngineConfiguration" ref="processEngineConfiguration" />
- </bean>
- <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
- <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
- <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
- <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
- <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
- </beans>