将 Spring Batch Admin 与另一个 JPA 持久性集成到 Spring Boot Web 应用程序中
Posted
技术标签:
【中文标题】将 Spring Batch Admin 与另一个 JPA 持久性集成到 Spring Boot Web 应用程序中【英文标题】:Integrating Spring Batch Admin In Spring Boot Web App With Another JPA Persistence 【发布时间】:2019-05-26 16:16:37 【问题描述】:我有一个 EAR 文件,其中包含我们的主应用程序(普通 UI 和 JEE 持久性)和 Spring Batch Admin 1.3.0 的 1 个 URL。我们正在将技术更新为 Spring Boot、Spring 5、Spring Data/JPA、Spring Batch 4 和一个 war 文件部署。到目前为止一切顺利,现在我们正处于集成 Spring Batch Admin 的阶段,我对最佳方法有点困惑。有很多问题和方法,我试图在两者之间做出选择。
就 Spring Batch Admin 而言,我们已经为我们的业务领域进行了一些定制,因此更愿意继续使用 freemarker 方法而不是切换到 Angular。所以我从代码here 开始。第一步是更新 Spring 5/Batch 4 的代码,然后重新添加我们的自定义,
最后,我正要尝试将 Spring Batch Admin UI 添加到 war 文件中。我将修改后的 Spring Batch Admin jar 文件添加到 pom.xml 中以获取 war 文件。大部分 spring 配置已迁移到 java config。但是,所有作业仍然在 XML 文件中。我将 data-source-context.xml(从 JNDI 加载)放在 META-INF 覆盖目录中(正如 Spring Batch Admin 所期望的那样。我看到 SBA 和 dataSource 加载的“dataSource”和“transactionManager”冲突和我在我的应用程序中定义的事务管理器(用于 Spring Data / JPA)。
处理这种情况的最佳方法是什么?理想情况下,SBA 管理员将只使用已经定义的 spring 组件。删除 @EnableBatchAdmin 并在我的配置类中处理 SBA 资源导入?
更新: 我遵循讨论的here 的方法,我看到系统启动和 UI 显示。现在我正在尝试加载作业 xml 文件。我已经为生成 spring 批处理管理实体生成了一个 java 配置。
现在,当我加载作业 xml 文件时,我看到错误,它无法找到 java 配置中定义的 bean。我认为 java 和 xml 配置可以共同存在于同一个项目中并相互引用 spring bean。
想法?
【问题讨论】:
【参考方案1】:不再维护 Spring Batch Admin。由于您正在迁移到 Spring Boot、Spring Framework 5 和 Spring Batch 4,我建议您借此机会将您的工作模块化为 Spring Boot 应用程序(可以使用 XML 或 Java 配置)并在 @987654321 中部署/运行它们@。
您可以在此处找到从 Spring Batch Admin 到 Spring Cloud DataFlow 的迁移指南:https://github.com/spring-projects/spring-batch-admin/blob/master/MIGRATION.md
【讨论】:
我查看了迁移到 Cloud Dataflow 并确定它可能对微服务和云部署有利,但不适合我们的应用程序。在有几个服务器的环境中,我们的小型客户端的额外复杂性是一个巨大的缺点。设置一个小型应用服务器集群要容易得多。此外,我们有大约 100 个批处理作业(大约 1/2 分区),为每个作业生成一个 Spring Boot 应用程序对我们来说不是一个好的选择。以上是关于将 Spring Batch Admin 与另一个 JPA 持久性集成到 Spring Boot Web 应用程序中的主要内容,如果未能解决你的问题,请参考以下文章
从 spring-batch-admin 迁移到 spring 云数据流
在 Spring Boot 应用程序中嵌入带有作业定义的 Spring Batch Admin
Spring Batch Admin + Spring Boot - 不明确的映射。无法映射“org.springframework.batch.admin.web.JobController#1”方
Freemarker 模板位置和 Spring Batch Admin