2013-06-28 22 views
0

我嘗試使用不同類型的傳播:傳播類型

<tx:advice id="txAdvice"> 
    <tx:attributes> 
     <tx:method name="*" propagation="SUPPORTS"/> 
    </tx:attributes> 
</tx:advice> 

下一次,我嘗試傳播= 「強制」

我也添加println()方法我doInTransaction方法:

 txTemplate.execute(new TransactionCallback<Void>() { 
     @Override 
     public Void doInTransaction(TransactionStatus txStatus) { 
      try { 
      ********************* 
            List<Map<String, Object>> rows = dbConn.queryForList(sql, bindValues); 
      *************************** 
        System.out.println(txStatus.toString()); 
        System.out.println(txStatus.isNewTransaction()); 
        System.out.println(txStatus.isRollbackOnly()); 
       } 
      }catch (RuntimeException e) { 
       txStatus.setRollbackOnly(); 
       throw e; 
      } 

結果是支持和強制propagetion txStatus的新值,它告訴我這是每次新的事務。

可能它不使用我的tx建議?

private TransactionTemplate txTemplate; 

@Autowired 
private SimpleJdbcOperations dbConn; 

@Autowired 
public TQuestionsRequestJDBC(PlatformTransactionManager txManager) { 
    super(); 
    txTemplate = new TransactionTemplate(txManager); 
} 


<!-- database connection --> 
<bean id ="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> 
    <property name="url" value="jdbc:mysql://127.12.141.1:3306/osapp?characterEncoding=UTF-8"/> 
    <property name="username" value="lm"/> 
    <property name="password" value="mlesia14"/> 
    <property name="initialSize" value="5"/> 
    <property name="maxActive" value="10"/> 
</bean> 

<bean id="jdbcConnection" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> 
    <constructor-arg ref="dataSource"/> 
</bean> 

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

回答

0

我今天試着用propagation =「MANDATORY」,它每次都拋出異常 - 因爲它不是當前事務。但它適用於傳播=「需要」。所以我的問題在於我。