我想要一个经典的事务行为:创建 a,创建 b,如果 b 的创建失败,则回滚 a 的创建。“没那么难,在你的方法上放一个@Transactional spring 注释。”我也是。但它不起作用。我正在使用 spring mvc 5.0.8(spring tx 的相同版本号,上下文,在下面的 pom.xml 中)。数据库是 mysql v.5.7.23首先,我的配置/代码,然后很多人得到一些冗余错误。这是一个服务级别的方法。@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)public B createB(B b) { //some logic to create a, instance of A aDao.saveA(a); //some logic to create b, instance of B return bDao.saveB(b);}这是数据源、jdbctemplate 和事务管理器配置:@Beanpublic DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(env.getRequiredProperty("jdbc.driverClassName")); dataSource.setUrl(env.getRequiredProperty("jdbc.url")); dataSource.setUsername(env.getRequiredProperty("jdbc.username")); dataSource.setPassword(env.getRequiredProperty("jdbc.password")); return dataSource;}@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource) { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.setResultsMapCaseInsensitive(true); return jdbcTemplate;}@Bean("transactionManager")public PlatformTransactionManager getTransactionManager(DataSource dataSource) { DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager(); dataSourceTransactionManager.setDataSource(dataSource); return dataSourceTransactionManager;}这是我的 pom.xml 的一部分:<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId></dependency>如果您需要更多来自 Daos 或其他代码的代码,请询问。
1 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
使用事务时,请确保您已@EnableTransactionManagement
在@Configuration
.
如果没有该注释,您基本上是在没有事务的情况下运行,这使得每个操作都在自己的事务中运行。
添加回答
举报
0/150
提交
取消