DataSourceTransactionManager 和 ResourcelessTransactionManager 有什么区别?

what is the difference between DataSourceTransactionManager and ResourcelessTransactionManager?

org.springframework.jdbc.datasource.DataSourceTransactionManager有什么区别 和 org.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>

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

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

ResourcelessTransactionManagerPlatformTransactionManager 的 No-Op 实现,这意味着不会有针对事务资源的实际事务正在进行(因此术语 Resourceless)。当您真的不需要(或不关心)事务行为时,您可以使用它,例如在 tests/prototypes 中或在使用 non-transactional 作业存储库时。此class由Spring批次提供,不建议用于生产。

另一方面,

DataSourceTransactionManager 来自 Spring 框架,用于驱动针对 JDBC 数据源(可以是真实数据库或 in-memory 的事务)一)。此事务管理器通常用于 Spring 批处理,以将批处理 meta-data 作为作业存储库存储在关系数据库中。