DataSourceTransactionManager 和 ResourcelessTransactionManager 有什么区别?

phk*_*hkr 3 spring transactions transactionmanager spring-batch spring-transactions

是有什么区别org.springframework.jdbc.datasource.DataSourceTransactionManagerorg.springframework.batch.support.transaction.ResourcelessTransactionManager

<bean id="batchTransactionManager" class=
  "org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
  
<bean id="batchJobLauncher"
  class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="batchJobRepository" />
    <property name="taskExecutor">
        <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

在上面的代码中使用resourcelesstransactionmanager是否正确?或者我应该使用 datasourcetransactionmanager 吗?有什么区别以及何时使用它们?

Mah*_*ine 8

Spring Batch 需要PlatformTransactionManager在驱动作业和与作业存储库交互时应用其事务语义。

ResourcelessTransactionManager是一个 No-Op 实现,PlatformTransactionManager这意味着不会有针对事务资源的实际事务正在进行(因此术语Resourceless)。当您并不真正需要(或关心)事务行为时,您可以使用它,例如在测试/原型中或使用非事务性作业存储库时。该类由 Spring Batch 提供,不建议用于生产。

DataSourceTransactionManager另一方面来自 Spring Framework,用于驱动针对 JDBC 数据源(可以是真实数据库或内存中的数据库)的事务。这个事务管理器通常在 Spring Batch 中用于将批处理元数据存储在关系数据库中作为作业存储库。