我有一个Java程序,可以将结果写入数据库(SQL Server)和电子表格(POI),如果两者都出错,最好不写入。
如果生成电子表格然后在保存到DB时发生错误会更糟糕,所以我首先要进行DB-write。即便如此,我想知道是否有人知道如何保证他们既成功又失败。
谢谢!
答案 0 :(得分:5)
考虑Java Common Transaction,它有一个File Transaction component。
如果您可以在更大的包含事务中将数据库调用和文件写入包装在文件事务中,那么您可能拥有所需的内容。
答案 1 :(得分:1)
使用XA事务在同一事务中包含文件系统操作和数据库操作(从而使它们成为原子)。 SQL Server已经支持XA;使用XADisk进行使用XA启用的文件系统事务。
答案 2 :(得分:0)
我们目前使用以下方法在事务中发送电子邮件:EMails被写入事务中的数据库表,并且帮助程序线程将它们取出并异步发送它们。后者可以重试几次,这使我们确信电子邮件可以离开。与调用报表服务器,传真服务器等相同。