spring+struts2+hibernate项目中 用spring管理事务用 quartz 做自动归档操作,为什么事务无法提交呢??

解决方案 »

  1.   

    配置文件 <bean id="filingTask" class="com.wlzx.filing.task.FilingTask"/>
     <bean id="filingTime" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail">
                <ref bean="filingTaskDetail" />
            </property>
            <property name="cronExpression">
                <value>0 0/1 * * * ?</value>
            </property>
        </bean>
        
        <bean id="startQuertz"
            class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
               
                    <ref bean="filingTime" />
                </list>
            </property>
        </bean>
    package com.wlzx.filing.manager.impl;import java.util.Date;
    import java.util.List;import com.wlzx.SystemConstant;
    import com.wlzx.base.manager.impl.BaseManagerImpl;
    import com.wlzx.filing.manager.IFilingManager;
    import com.wlzx.logistics.model.LogisticsInfoIndex;
    import com.wlzx.saleIssue.model.BillStartDelivery;
    import com.wlzx.saleIssue.model.PassPermit;
    import com.wlzx.util.DateUtil;
    /**
     * 归档实现
     * @author doonly
     * @version 创建时间:Nov 14, 2010  10:49:14 AM
     */
    @SuppressWarnings("unchecked")
    public class FilingManagerImpl extends BaseManagerImpl implements
    IFilingManager,SystemConstant { public void filingDepartTx() {
    String hql="From BillStartDelivery b where b.platformStatus=? and b.filingStatus<>? and b.operateDate<=?";
    Date filingDate=DateUtil.getNextDate(new Date(),-FILING_DEPART);
    List<BillStartDelivery>startList=findByHql(hql, new Object[]{BillStartDelivery.DEPARTED,BillStartDelivery.FILING_NO,filingDate});
    System.out.println("startList"+startList.size());
    for(BillStartDelivery billStartDelivery:startList){
    billStartDelivery.setFilingStatus(BillStartDelivery.FILING_YES);
    getHibernateTemplate().update(billStartDelivery);
    }
    } public void filingLogisticsInfoTx() {
    String hql="From LogisticsInfoIndex i where  i.filingStatus<>? and i.createDate<=?";
    Date filingDate=DateUtil.getNextDate(new Date(),-FILING_LOGISTICSINFO);
    List<LogisticsInfoIndex>infoList=findByHql(hql, new Object[]{LogisticsInfoIndex.FILING_NO,filingDate});
    System.out.println("infoList"+infoList.size());
    for(LogisticsInfoIndex infoIndex:infoList){
    infoIndex.setFilingStatus(LogisticsInfoIndex.FILING_YES);
    getHibernateTemplate().update(infoIndex);
    }
     
    } public void filingPassPermitTx() {
    String hql="From PassPermit p where  p.filingStatus<>? and p.operateDate<=?";
    Date filingDate=DateUtil.getNextDate(new Date(),-FILING_PASSPERMIT);
    List<PassPermit>permitList=findByHql(hql, new Object[]{PassPermit.FILING_NO,filingDate});
    System.out.println("permitList"+permitList.size());
    for(PassPermit passPermit:permitList){
    passPermit.setFilingStatus(PassPermit.FILING_YES);
    getHibernateTemplate().update(passPermit);
    }
    }}
    package com.wlzx.filing.task;import com.wlzx.filing.manager.IFilingManager;/**
     * 归档任务
     * @author doonly
     * @version 创建时间:Nov 14, 2010  11:02:59 AM
     */
    public class FilingTask {
    private IFilingManager filingManager;
    public void filing(){
    filingManager.filingDepartTx();//归档发车
    filingManager.filingPassPermitTx();//归档出门许可
    filingManager.filingLogisticsInfoTx();//归档上传信息
    }
    public void setFilingManager(IFilingManager filingManager) {
    this.filingManager = filingManager;
    }

    }
      

  2.   


    spring 事务的配置 <!-- 配置事务的传播特性 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="save*" propagation="REQUIRED" />
    <tx:method name="remove*" propagation="REQUIRED" />
    <tx:method name="*Tx" propagation="REQUIRED" />
    <tx:method name="*" read-only="true" />
    </tx:attributes>
    </tx:advice> <!-- 那些类的哪些方法参与事务 -->
    <aop:config>
    <aop:pointcut id="allManagerMethod"
    expression="execution(* com.wlzx.*.manager.*.*(..))" />
    <aop:advisor pointcut-ref="allManagerMethod"
    advice-ref="txAdvice" />
    </aop:config>
      

  3.   

    可以启动任务 也查询出SQL来了,就是无法提交。手动开启事务关闭事务;还会抛出事务的异常