Spring::如果一个新线程会被 Spring 在事务中强制执行

标签 spring spring-transactions

我们正在使用声明性 spring 事务属性来确保数据库完整性。我们的一些代码调用了 webservice,它们在 sharepoint 中做了很多事情。问题是当 Web 服务需要更长的时间时,用户会从阻止后端的 spring 中陷入僵局。

如果我在具有 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.
        }
    }

还有什么我应该去的选择吗?

最佳答案

您不需要在事务中执行此操作。事务使数据库正确保存对象。就是这样。所有其他的事情都必须在事务提交之后完成。在 Java 中,您可以使用 Spring 的事务同步或 JMS 来实现。看看接受的答案 over here .

More useful info特定于 .NET(见 17.8)。

关于Spring::如果一个新线程会被 Spring 在事务中强制执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22985548/

相关文章:

java - Spring 文件上传 etat HTTP 405 - 不支持请求方法 'POST'

java - Spring Boot中接受来自特定ip的请求

java - 如何将登录用户的 session 数据传输到另一个 Java 应用程序

java - Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final - 无法获取当前线程的事务同步 session

spring - 使用自定义 AnnotationTransactionAttributeSource 和 tx :annotation-driven

java - Camel <packageScan> 不工作?

java - WebDriver容器无法访问DockerComposeContainer服务

java - Spring中的@Transactional注解

java - 如何用Spring切换动态事务?

grails - 服务 chalice 的多种方法