java - 为什么插入两条相同的记录事务不回滚

标签 java transactions

我做了一个javaweb的基础项目,并在上面添加了spring事务配置,但是没有效果。在此之前,它运行良好。网上查了很多资料,配置和我的一样。

预期结果是不会插入任何内容,但插入了一条记录。

请帮我看看问题出在哪里,谢谢

我的serviceimpl路径是:com.lidaning.sys.user.service.UserInfoServiceImpl

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

 <tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="insert*" propagation="REQUIRED"/>    
        <tx:method name="*"/>
    </tx:attributes>
 </tx:advice>

 <aop:config>
    <aop:pointcut id="txPointcut" expression="execution(* com.lidaning.sys.user.service..*.*(..))" />
    <aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/>
 </aop:config>

@Override
public void insertUser(UserInfo u) {
    u.setId("1");
    u.setName("lidaning");
    u.setPassword("***");
    userInfoDao.insertUser(u);
    userInfoDao.insertUser(u);  //occur exception 
}

最佳答案

我明白了原因。由于spring加载了两次serviceBean(spring、springMVC),导致service失去了事务的特性。当我将 Controller 与应用程序上下文分离并将其放入 springMVC 中时,它可以工作。

关于java - 为什么插入两条相同的记录事务不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53955001/

相关文章:

java - 关于 OpenJDK 11 和 OpenJFX 11(和 Proguard)的迁移问题

java - RequestMapping不是多线程的吗?

java - 如何使用arcobject(Arcgis 10)构建java桌面应用程序?

java - DB事务还是Java DAO的方法同步?

java - 跨越多个 WAR 的事务

java - 添加带有单词 "add"的数字

java - 在 Spring 上下文创建之前执行操作

sql - 如何在 PostgreSQL 事务中使用变量

java - Hibernate 将对象保存到多个 session

sql-server - 了解 SQL Server 查询执行和事务