我Spring Cloud Task + Batch
在一个项目中使用。我计划对任务使用不同的数据源用于业务数据和Spring审核数据。所以我配置如下:
@Bean
public TaskConfigurer taskConfigurer() {
return new DefaultTaskConfigurer(this.singletonNotExposedSpringDatasource());
}
@Bean
public BatchConfigurer batchConfigurer() {
return new DefaultBatchConfigurer(this.singletonNotExposedSpringDatasource());
}
而主要数据源是通过进行自动配置的JpaBaseConfiguration
。
问题是当SimpleBatchConfiguration
+
DefaultBatchConfigurer
暴露一个PlatformTransactionManager
bean时出现的,因为JpaBaseConfiguration
它具有@ConditionalOnMissingBean
on
PlatformTransactionManager
。因此Batch's PlatformTransactionManager
,绑定spring.datasource
发生。
到目前为止,这似乎是由于此错误引起的
因此,我尝试模仿所做的事情,JpaBaseConfiguration
并PlatformTransactionManager
在biz数据源/
entityManager上定义了自己的内容。
@Primary
@Bean
public PlatformTransactionManager appTransactionManager(final LocalContainerEntityManagerFactoryBean appEntityManager) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(appEntityManager.getObject());
this.appTransactionManager = transactionManager;
return transactionManager;
}
请注意,我必须使用以外的名称来定义它transactionManager
,否则会Spring
发现2个bean并抱怨(与无关@Primary!
)
但是现在它是有趣的部分。在运行测试时,一切都会顺利进行,测试已完成,并且DDLs
已为业务和Batch/Task's
数据库正确创建,数据库读取工作无懈可击,但是业务数据未持久保存在我的测试数据库中,因此最终assertThats
失败时就无法计数。如果我@Autowire
在测试PlatformTransactionManager
或中ÈntityManager
,则一切都表明它们是正确的。但是,如果我在中调试entityRepository.save
,然后执行org.springframework.transaction.interceptor.TransactionAspectSupport.currentTransactionStatus()
,似乎DatasourceTransactionManager
from
Batch's
配置已被覆盖,因此PlatformTransactionManager
未使用我的自定义暴露。
因此,我想我的PlatformManager成为主要对象不是问题,但是正在配置JPA层TransactionInterceptor
以使用非主要但transactionManager
名为Batch的bean。
我也尝试使我的@Configuration
工具TransactionManagementConfigurer和重写,PlatformTransactionManager annotationDrivenTransactionManager()
但仍然没有运气
因此,我想我要问的是是否有一种方法可以为JPA层配置主TransactionManager。
当SimpleBatchConfiguration +
DefaultBatchConfigurer公开PlatformTransactionManager bean时,就会出现问题,
如您所述,这确实是BATCH-2788中报告的内容。我们正在探索的解决方案是
仅在 Spring Batch创建事务管理器bean 时才 公开它。
同时,您可以设置属性spring.main.allow-bean-definition- overriding=true
以允许Bean定义覆盖,并设置要Spring
Batch与之配合使用的事务管理器BatchConfigurer#getTransactionManager
。在您的情况下,它将类似于:
@Bean
public BatchConfigurer batchConfigurer() {
return new DefaultBatchConfigurer(this.singletonNotExposedSpringDatasource()) {
@Override
public PlatformTransactionManager getTransactionManager() {
return new MyTransactionManager();
}
};
}
希望这可以帮助。
我正在一个项目中使用。我计划对任务中的业务数据和Spring审计数据使用不同的数据源。所以我配置了如下内容: 而主数据源是通过自动配置的。 当公开一个bean时,问题就出现了,因为在上有一个。因此绑定到发生。 到目前为止,这似乎是因为这个错误造成的 因此,我试图模仿的功能,在我的业务数据源/entityManager上定义自己的。 注意我必须用以外的名称来定义它,否则会找到2个bean并抱怨(不管
注册表是Windows系统的关键要素之一。 它包含有关操作系统各个方面的大量信息。 几乎所有安装在Windows系统上的应用程序都以某种形式与注册表交互。 注册表包含两个基本元素:键和值。 注册表项是与文件夹类似的容器对象。 注册表值是与文件类似的非容器对象。键可能包含值或其他键。 使用类似于Windows路径名称的语法来引用键,并使用反斜杠来指示层次结构的级别。 本章介绍查询值,添加,删除和编辑
我正在尝试了解如何使用Spring。 我试着效仿这个例子。但是,当我从Eclipse启动Tomcat时,我得到了以下错误: 这是DispatcherServlet的相关代码。xml salvaUtente()是一种方法,我将在其中处理多个插入(现在仍然是exmpty)。
批处理配置具有spring作业,只有一个步骤 1)读取器-从csv文件读取。处理器对文件应用一些规则。Drools请运行schema-postgresql.sql来设置数据库 WRITER使用SPRING DATA JPA写入DB Writer将此称为PersonDaoImpl:
我是新的Spring批与引导。我在使用postgres配置jobRepositoryFactory bean作为数据库时遇到了一个问题。下面是我的配置类。 下面是Spring boot App run的输出 我已经在我的configuration类中配置了bean。我错过了什么?
当我查看Spring Batch留档以并行执行步骤时,我只看到它通过XML的配置,如下所示。 我正在使用Spring批处理编写一个应用程序,我也使用了Spring Boot,我的所有配置都是使用注释完成的。是否有一个我可以使用Java配置来配置拆分步骤的方法?我查看了Spring Batch中Step interface的API文档,但它没有Split Step的默认实现。有没有办法使用现有的默认
问题内容: 我有以下测试课: 问题似乎来自BaseTestConfiguration类: 我系统地得到了这个异常: 我不确定如何解决此问题。当我运行测试时,Spring不知何故正在寻找ServletContext并收到上述异常… 问题答案: 你的其中一门课程显然带有注释。这是如何结束在你的堆栈跟踪,因为它是进口的。 因此,尽管你认为自己不需要(因此也不需要),但实际上确实需要它,只是因为你正在使用
Spring Integration Java DSL Reference和Spring Batch Java配置文档说明了如何将Java配置用于Spring Integration和Spring Batch。 但它们没有说明如何为Spring批处理集成配置它。如何使用DSL配置JobLaunchingGateway? 干杯,曼诺