Spring事务管理的一次Bug调试

在JavaWeb开发中,作者遇到一个Spring事务管理失效的Bug。问题源于错误的@Transactional注解、事务配置的重复以及Spring配置与SpringMVC配置的不匹配。经过调试,发现将Service包扫描从SpringMVC配置文件移回Spring配置文件中解决了问题,强调了理解配置和注解的重要性。
摘要由CSDN通过智能技术生成

现在JavaWeb使用了各种框架,而各种框架对程序产生作用是通过配置+注解的方式来实现的。这就出现了一个问题:调试困难!
前几天做SQLite数据导入MySQL的时候,出现了一个事务失效的Bug,费尽周折才解决。最终总结了一下,这个Bug是由三四个不同方面的原因导致的,有配置方面的,注解方面的,程序方面的种种。而调试过程现在回头来看也确实是经验帮了很大的忙,入手不久的新人可能再看半天也是干瞪眼。
不过有一个不一定靠谱的结论:首先一定要相信是你自己的程序出了问题,不要轻易怀疑是框架出了问题。

Bug描述:

@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = {java.sql.SQLException.class})
    public String transferData(String realurl, String dburl) throws SQLException {
        Connection connection = openSQLiteConnection(realurl);
        if (connection == null) {
            return ResultBuilder.getResult(false, "", "无法打开数据库!").toString();
        }
        try {
            DBInfo dbInfo = transferDBInfo(connection, dburl);
            Map<Integer, NormItemSection> sectionMap = new HashMap<Integer, NormItemSection>();
            transferNormItemSection(connection, dbInfo, sectionMap);
            transferNormItem(connection, dbInfo, sectionMap);
            Map<Integer, ResourceCatalog> catalogMap = new HashMap<Integer, ResourceCatalog>();
            transferResourceCatalog(connection, dbInfo, catalogMap);
            transferResource(connection, dbInfo, catalogMap);
            return ResultBuilder.getResult(true, "", "保存成功!").toString();
        } catch (SQLException e) {
            e.printStackTrace();
            throw e;
        } finally {
            closeSQLiteConnection(connection);
        }
    }

以上是主要的业务逻辑代码,主要做数据迁移的事情!
- 打开SQLite数据库连接;
- 迁移DBInfo数据;
- 迁移NormItemSection数据;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值