【发布时间】:2016-01-28 09:01:21
【问题描述】:
我的配置代码在这里:
@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);
}
在create方法中,当type为ACTIVITY_CANCEL时,抛出异常。但是这个活动也被插入到数据库中,而不是回滚。为什么?
【问题讨论】:
-
数据库是postgres
-
您是否检查过您的“orderactivityDao”在插入方法中没有强制提交?
-
尝试将@ComponentScan("com.yourtxpkg") 添加到DataSourceConfig
标签: spring mybatis transactional