猿问

Spring (5.0.8) 事务和 jdbcTemplate

我想要一个经典的事务行为:创建 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 和事务管理器配置:


@Bean

public 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;

}


@Bean

public 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 或其他代码的代码,请询问。


交互式爱情
浏览 164回答 1
1回答

芜湖不芜

使用事务时,请确保您已@EnableTransactionManagement在@Configuration.如果没有该注释,您基本上是在没有事务的情况下运行,这使得每个操作都在自己的事务中运行。
随时随地看视频慕课网APP

相关分类

Java
我要回答