我们使用声明性spring transaction属性来保证数据库的完整性。我们的一些代码调用webservice,它们在sharepoint中执行大量的操作。问题是当webservices花费更长的时间时,用户会因为弹簧而导致死锁,这会阻碍后端。
如果我在一个具有spring事务声明属性的函数中创建一个新线程,那么会从spring中忽略它吗?
[Transaction(TransactionPropagation.Required, ReadOnly = false)]
public void UploadPDFManual(/*parameters*/)
{
//DO some data base related things
if (revisionPDFBytes != null)
{
//my sharepoint call which calls webservice
Task.Factory.StartNew(() => DocumentRepositoryUtil.CreateSharepointDocument(docInfo)); // I draw a new thread from ASPNET worker thread pool.
}
}
我应该选择其他任何选择吗?
答案 0 :(得分:0)
您不需要在交易中执行此操作。事务使数据库正确保存对象。就是这样。所有其他东西必须在事务提交后完成。在Java中,您可以使用Spring的事务同步或JMS来实现它。看一下接受的答案over here。
More useful info特定于.NET(见17.8)。