一个有趣但没有通用良好解决方案的问题是:如何更改正在运行的 Spring 应用程序的配置?Spring Batch Admin 1.0.0.M3 最近发布,它有一个配置上传功能,以一种特殊的方式解决了这个问题。有人在最近的慕尼黑 S2GForum 上提出了这个功能(如果您错过了,请注册 5 月份在伦敦和阿姆斯特丹的活动),我很乐意告诉他它已经存在了,所以也许它值得更多的时间来介绍...
基本用例的屏幕截图

我们首先查看应用程序中的“作业”视图。 它显示了 Web 应用程序可以启动或监控的作业列表。
现在的计划是上传一个新的作业配置并查看此视图更改。 因此,我们从顶部导航栏中的“文件”菜单开始,然后单击“配置”。 这会显示一个简单的表单来上传文件。 如果我们指向 Spring XML 配置文件,则视图如下所示

我们按下“上传”按钮,配置将被上传和解析,并且
作业上传文件中的实例被注册以进行启动:

您可以在作业注册表中看到一个新条目(“test-job”),它可以在进程内启动,因为应用程序引用了作业。 (不可启动的作业是在进程外执行的,但使用了相同的数据库作为它的JobRepository,因此它们在 UI 中显示了它们的执行情况。)
基本用例的变体
基本上传用例的一个常见变体是上传对现有
作业配置的修改,而不是全新的配置。 这是很常见的,因为人们经常需要调整运行时参数,尤其是在性能测试时。 例如,我们可以更改一个
commit-interval在
步骤中一个
作业这样可以在重复的项目处理过程中,将更多(或更少)的项目组合成一个块并一起提交。
步骤期间,更多(或更少)的项目被分组在一个块中并一起提交。 这可能会影响性能,并且
作业可能会运行得更快,因为更有效地利用了事务资源。 通过从应用程序启动
作业并检查结果,我们可以直接测量和验证这一点(因为 Web 界面是面向资源的,所以也可以使用基于
curl).
的简单 shell 脚本来自动化此过程)。
它是如何工作的?
作业实现此用例的秘诀是
ApplicationContext实例,这些实例按其文件名进行跟踪。 执行环境(
JobLauncher, 事务管理器,
DataSource等)由应用程序作为父上下文提供,并且
作业都存在于该环境的子上下文中。 这意味着它们可以是易失的,并且它们的生命周期可以由应用程序中的服务管理。 有问题的服务恰好通过 Spring Integration 激活(以我在
之前的帖子中描述的方式),通过服务激活器包装
JobLoader,这是 Spring Batch 中的一个标准组件。
接下来是什么?
访问 Batch Admin 网站以获取更多信息,并找到获取代码进行体验的位置。 请记住五月份在伦敦和阿姆斯特丹即将举行的 S2GForum 活动,Spring Batch 和 Spring Integration 的负责人(Dave Syer 和 Mark Fisher)将在一个会议中讨论和演示该应用程序。