项目中要操作多个数据库的表,因此要配置多个数据源,配置如下:
 <context:property-placeholder location="classpath:config/jdbc.properties" />
 
 
     <!-- DataSource数据源,使用c3p0连接池 -->
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 <property name="driverClass" value="${jdbc.driverClassName}"></property>
 <property name="jdbcUrl"     value="${jdbc.url}"></property>
 <property name="user"        value="${jdbc.username}"></property>
 <property name="password"    value="${jdbc.password}"></property>
 <property name="minPoolSize" value="20"></property>
 <property name="maxPoolSize" value="40"></property>
 <property name="initialPoolSize" value="20"></property> 
 <property name="maxIdleTime" value="10000"></property>
 <property name="acquireIncrement" value="10"></property>
 <property name="maxStatements" value="0"></property>
 <property name="idleConnectionTestPeriod" value="60"></property>
 </bean>
 
 <!-- pojo 映射 -->
     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="dataSource" />
         <property name="configLocation" value="classpath:mybatis/mybatis-config-service.xml"/>
         <!--define entity package  -->
         <property name="typeAliasesPackage" value="com.app.anilys.dc.domain.*" />
     </bean>
     
     <!-- 数据源2配置 start -->
 <bean id="activityDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
 <property name="driverClass" value="${jdbc.driverClassName}"></property>
 <property name="jdbcUrl"     value="${jdbc.activity.url}"></property>
 <property name="user"        value="${jdbc.username}"></property>
 <property name="password"    value="${jdbc.password}"></property>
 <property name="minPoolSize" value="20"></property>
 <property name="maxPoolSize" value="40"></property>
 <property name="initialPoolSize" value="20"></property> 
 <property name="maxIdleTime" value="10000"></property>
 <property name="acquireIncrement" value="10"></property>
 <property name="maxStatements" value="0"></property>
 <property name="idleConnectionTestPeriod" value="60"></property>
 </bean>
 <bean id="activitySqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="dataSource" ref="activityDataSource" />
         <property name="configLocation" value="classpath:mybatis/mybatis-config-activity.xml"/>
         <property name="typeAliasesPackage" value="com.app.anilys.dc.domain.*" />
     </bean>
 <!-- 数据源2配置 end -->
     
      <!-- 自动扫描组件,这里要把controler下面的 controller去除,他们是在spring3-servlet.xml中配置的,如果不去除会影响事务管理的。   -->
 <context:component-scan base-package="com.app.anilys.dc">
         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
     </context:component-scan>
    
     <!-- @AspectJ的支持,从而可以实现通过注解方式将通知编织到非公共方法中。 -->
     <aop:aspectj-autoproxy proxy-target-class="true"/>
    
     <!-- 扫描mapper -->
     <bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="com.app.anilys.dc.dao.*" />
       <property name="sqlSessionFactory" ref="sqlSessionFactory" />
     </bean>
     
     <bean name="activityMapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="com.app.anilys.dc.dao.*" />
       <property name="sqlSessionFactory" ref="activitySqlSessionFactory" />
     </bean>
 
 <!-- dao 事务 -->
     <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource" />
     </bean>
     <!-- 数据源2事务管理器配置 start -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="activityDataSource" />
     </bean>
     <!-- 数据源2事务管理器配置 end -->
     
     <!-- spring 声明事务管理 -->
 <aop:config>
 <aop:pointcut id="fooServiceMethods" expression="execution(* com.app.anilys.dc.serviceimpl.*.*.*(..))"/> 
         <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceMethods"/> 
 </aop:config>
 <aop:config>
 <aop:pointcut id="controllerMethods" expression="execution(* com.app.anilys.dc.controller.*.*.*(..))"/> 
         <aop:advisor advice-ref="txAdvice" pointcut-ref="controllerMethods"/> 
 </aop:config>
 
 <!-- 数据源2事务通知配置 start -->
 <aop:config>
 <aop:pointcut id="activityFooServiceMethods" expression="execution(* com.app.anilys.dc.serviceimpl.*.*.*(..))"/> 
         <aop:advisor advice-ref="activityTxAdvice" pointcut-ref="activityFooServiceMethods"/> 
 </aop:config>
 <aop:config>
 <aop:pointcut id="activityControllerMethods" expression="execution(* com.app.anilys.dc.controller.*.*.*(..))"/> 
         <aop:advisor advice-ref="activityTxAdvice" pointcut-ref="activityControllerMethods"/> 
 </aop:config>
 <!-- 数据源2事务通知配置 end -->
 
 <!-- 事务管理配置 -->
 <tx:advice id="txAdvice" transaction-manager="txManager">
 <tx:attributes>
 <tx:method name="select*" read-only="true" propagation="REQUIRED" />
             <tx:method name="find*"   read-only="true" propagation="REQUIRED" />
             <tx:method name="get*"   read-only="true" propagation="REQUIRED" />
             <tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="start*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="*" rollback-for="V20Exception"/>
 </tx:attributes>
 </tx:advice>
 <!-- 数据源2事务通知配置 start -->
 <tx:advice id="activityTxAdvice" transaction-manager="transactionManager">
 <tx:attributes>
 <tx:method name="select*" read-only="true" propagation="REQUIRED" />
             <tx:method name="find*"   read-only="true" propagation="REQUIRED" />
             <tx:method name="get*"   read-only="true" propagation="REQUIRED" />
             <tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="update*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="delete*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="start*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
             <tx:method name="*" rollback-for="V20Exception"/>
 </tx:attributes>
 </tx:advice>
 <!-- 数据源2事务通知配置 end -->
 <beans> 
启动tomcat,访问工程应用,报如下错误:
 org.springframework.jdbc.BadSqlGrammarException: 
 ### Error querying database.  Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'ActivityUser' 无效。
 
 
 
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
配置文件太多,眼花,目测扫描Mapper这里有问题,两个扫描路径是一样的,怎么区分?
为引擎指定数据源了么?上面只看到你配置了数据源,好像没有指定吧。
  <!--流程引擎属性配置-->
  <beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
    <propertyname="dataSource"ref="dataSource"/>
    <propertyname="idGenerator"ref="midGenerator"/>
    <propertyname="transactionManager"ref="transactionManager"/>
    <propertyname="databaseSchemaUpdate"value="true"/>
    <!--允许Activit更新数据表-->
    <propertyname="activityFontName"value="宋体"/>
    <propertyname="labelFontName"value="宋体"/>
    <propertyname="jobExecutorActivate"value="false"/>
    <propertyname="history"value="full"/>
    <propertyname="processDefinitionCacheLimit"value="10"/>
  </bean>
为引擎指定数据源了么?上面只看到你配置了数据源,好像没有指定吧。
  <!--流程引擎属性配置-->
  <beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
    <propertyname="dataSource"ref="dataSource"/>
    <propertyname="idGenerator"ref="midGenerator"/>
    <propertyname="transactionManager"ref="transactionManager"/>
    <propertyname="databaseSchemaUpdate"value="true"/>
    <!--允许Activit更新数据表-->
    <propertyname="activityFontName"value="宋体"/>
    <propertyname="labelFontName"value="宋体"/>
    <propertyname="jobExecutorActivate"value="false"/>
    <propertyname="history"value="full"/>
    <propertyname="processDefinitionCacheLimit"value="10"/>
  </bean>