我有一个旧的应用程序(从main()
方法开始的简单Java文件),它被4-5个自动系统作业调用,所有这些作业都同时传递不同的参数。
现在,我已经将此应用程序重构为使用spring boot CommandLineRunner。我只更改了启动文件,以使用spring boot来升级它。
问:如果我的autosys作业同时调用此应用程序5次,并传递不同的参数,是否会产生任何问题?有没有线程执行冲突、对象冲突或其他问题?
据我所知,我找不到我的答案anywhere..though,所有这5个调用都应该创建不同的JVM并从CommandLineRunner执行spring bean。他们应该被分开对待。
来自autosys的调用是简单的“Java -jar javaApp.jar arg1 arg2
”
需要你的专业建议。感谢您的快速帮助。
发布于 2021-03-22 12:56:53
如果您在Spring应用程序中创建了不同的CommandLineRunner类,那么Spring将在主线程中按顺序运行它们。不涉及额外的线程。runners是应用程序初始化的最后一步。我碰巧知道这一点,因为它最近对我正在做的事情很重要,所以我看了源代码。
要亲自查看这一切,您需要做的就是在其中一个运行器的开头设置一个断点,然后查找调用堆栈。您将看到位于您正上方的runners上的循环,并且您将看到堆栈的底部包含应用程序的main()
。与许多进入Spring源代码的冒险不同,这一次非常简单。我建议你这样做,如果你能看到它是多么的简单。
如上所述,听起来Spring和before...other之间并没有什么真正的区别,当然,除了你对你的逻辑所做的改变之外。Spring在这里不会增加任何复杂性。
正如@MrR所说,如果你同时运行你的应用程序的多个副本,你可能会遇到的唯一问题是争用外部资源。但是你也可以用旧的代码来做这些。Spring在这里也没有引入任何新的东西。
https://stackoverflow.com/questions/66740067
复制相似问题