现在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数据;