首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Spring Boot同时运行多个CommandLineRunner是线程安全的吗?

通过Spring Boot同时运行多个CommandLineRunner是线程安全的吗?
EN

Stack Overflow用户
提问于 2021-03-22 11:44:36
回答 1查看 243关注 0票数 1

我有一个旧的应用程序(从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

需要你的专业建议。感谢您的快速帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-03-22 12:56:53

如果您在Spring应用程序中创建了不同的CommandLineRunner类,那么Spring将在主线程中按顺序运行它们。不涉及额外的线程。runners是应用程序初始化的最后一步。我碰巧知道这一点,因为它最近对我正在做的事情很重要,所以我看了源代码。

要亲自查看这一切,您需要做的就是在其中一个运行器的开头设置一个断点,然后查找调用堆栈。您将看到位于您正上方的runners上的循环,并且您将看到堆栈的底部包含应用程序的main()。与许多进入Spring源代码的冒险不同,这一次非常简单。我建议你这样做,如果你能看到它是多么的简单。

如上所述,听起来Spring和before...other之间并没有什么真正的区别,当然,除了你对你的逻辑所做的改变之外。Spring在这里不会增加任何复杂性。

正如@MrR所说,如果你同时运行你的应用程序的多个副本,你可能会遇到的唯一问题是争用外部资源。但是你也可以用旧的代码来做这些。Spring在这里也没有引入任何新的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66740067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档