2011-03-08 79 views
1
<!-- Data source definition --> 
<bean id="dataSourceWebsube" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource" 
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url.websube}" 
    p:username="${jdbc.username.websube}" p:password="${jdbc.password.websube}" /> 

<bean id="jdbcTemplateWebsube" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <property name="dataSource" ref="dataSourceWebsube" /> 
</bean>   

<!-- Transaction manager, actually this one is useless since the Transaction Manager Bean is already called transactionManager -->  
<tx:annotation-driven transaction-manager="transactionManager"/> 

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

public class Test 
{ 
@Transactional 
public static void testTranscational(JdbcTemplate jdbcTmpl) 
{ 
    String sql = null;        
    sql = "INSERT INTO NBSM.INT_RTLNOUTBOUND_PRODUCTS(BASEPRODUCTCODE)VALUES(1)";     
    jdbcTmpl.update(sql);   
    throw new RuntimeException();      
} 

public static void main(String[] args) {    
    ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml"); 
    JdbcTemplate jdbcTmpl = (JdbcTemplate) ctx.getBean("jdbcTemplateWebsube");  
    testTranscational(jdbcTmpl); 
} 
} 

你好,春天数据源的事务管理器不回滚

我想测试Spring的事务管理能力,但我无法得到它的工作。我一直试图解决它几个小时,但没有运气。

上面你可以看到相关的config xml定义和dao测试类。即使我使用调试级别进行日志记录,也没有回滚机制的占用空间。

任何帮助,将不胜感激

回答

2

这是因为Spring AOP的只能:

  • 一)工作在Spring管理豆
  • b)就没有静态方法的工作
  • Ç )仅在调用Spring AOP代理时才考虑(您需要从其他Bean调用Bean,但不从其本身调用)

a)和b)是你的缺点,你需要修复它。 - 为了克服c)的问题,我强烈地用AspectJ编译时候的挥手来代替Spring AOP。

如果我是正确的,即使处理(由@Transational交易不能工作

需要由别人来检查:

我从来没有见过@Transactional结合JdbcTemplate ,所以我怀疑这是否可行。 - 但我可能是错的。