2016-01-28 3 views
0

Мой конфигурационный код здесь:метод Java Spring @Transactional не откате, когда бросить исключение

@Configuration 
@EnableTransactionManagement(proxyTargetClass = true) 
@PropertySource(value="classpath:datasource.properties") 
public class DataSourceConfig { 

    @Autowired private Environment env; 

    @Bean(destroyMethod="close") 
    public BasicDataSource dataSource() { 
     BasicDataSource ds = new BasicDataSource(); 
     ds.setDriverClassName(env.getProperty("db.driverClass")); 
     ds.setUrl(env.getProperty("db.url")); 
     ds.setUsername(env.getProperty("db.username")); 
     ds.setPassword(env.getProperty("db.password")); 
     ds.setInitialSize(Integer.valueOf(env.getProperty("db.initialSize"))); 
     return ds; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(DataSource dataSource) { 
     return new DataSourceTransactionManager(dataSource); 
    } 

} 

@Transactional метод:

@Override 
    @Transactional 
    public void create(String orderid, String type, String userid, 
      String comment) throws Exception { 
     log.info("### orderid={}, type={}, userid={}, comment={}", 
       orderid, type, userid, comment); 
     OrderActivity orderActivity = new OrderActivity(); 
     orderActivity.setActivityid(SeqUtil.produceOrderActivityid()); 
     orderActivity.setComment(comment); 
     orderActivity.setOperator(userid); 
     orderActivity.setOrderid(orderid); 
     orderActivity.setType(type); 
     orderactivityDao.insert(orderActivity); 
     //FIXME just for test 
     if(OrderConstant.ACTIVITY_CANCEL.equals(type)){ 
      throw new RuntimeException(); 
     } 
     log.info("###orderActivity=[{}]", orderActivity); 
    } 

В методе создания, когда типа является ACTIVITY_CANCEL, затем выполните исключение. Но эта деятельность также будет вставлена ​​в базу данных, а не откат. Зачем?

+0

База данных postgres – user3871134

+0

Вы проверили, что ваш «orderactivityDao» не имеет принудительного фиксации в методе вставки? – Samurai

+0

попробуйте добавить @ComponentScan ("com.yourtxpkg") в DataSourceConfig – Persia

ответ

0

У меня есть. Я положил AppConfig и b в DataSourceConfig в другом контексте. Изменен код:

@Override 
protected Class<?>[] getRootConfigClasses() { 
    return new Class<?>[] {AppConfig.class, DataSourceConfig.class, MybatisConfig.class, SecurityConfig.class }; 

} 

@Override 
protected Class<?>[] getServletConfigClasses() { 
    return new Class<?>[] { MCVConfig.class}; 
} 

Тогда все в порядке.

 Смежные вопросы

  • Нет связанных вопросов^_^