当前位置: 首页 > 知识库问答 >
问题:

当有多个类实现应用程序运行器时,如何只加载一个实现应用程序运行器的特定类?

米俊晤
2023-03-14

在我的代码库中有两个实现org.springframework.boot.ApplicationRunner的类。当我的应用程序被加载时,实现ApplicationRunner的两个类都被加载。有没有任何命令行参数可以用来控制实现ApplicationRunner的特定类被加载,尽管这两个类在类级都有@component注释?

目前,我正在命令行中传递一个参数,如

“$springbootapp_java”-xmx4096m-jar$basedir/item_substitution-1.0.jar--spring.config.additional--location=${CONFIG_FILE},${CONNECTION_FILE}--applicationrunner=“itemoutofstocksubstitutionjob”

在课堂上

@Component公共类ItemOutOfStockSubstitutionJob实现ApplicationRunner{

私有静态最终记录器log=loggerFactory.getLogger(itemSubstitutionConstants.process_log);

logInfo(log,className+“

SubstitutionJob进程执行开始

if( !args.getOptionNames().isEmpty() 

        && 

args.getOptionNames().contains(itemsubstitutionConstants.application_runner

        && 

args.getOptionValues(itemSubstitutionConstants.application_runner).get(0).e

qualsIgnoreCase(itemsupplactionconstants.item_out_of_stock_supplaction_jo

    logInfo(log, className + "_____________________: 

APPLICATION_RUNNER==ITEM_OUT_OF_STOCK_SUBSTITUTION_JOB

:_________________“);

}

logInfo(log, className + "_____________________: APPLICATION_RUNNER 

!=ITEM_OUT_OF_STOCK_SUBSTITUTION_JOB:__________________“);

但是由于@Component,这两个类都加载了

防止特定类不从命令行本身加载?

共有1个答案

史鹏云
2023-03-14

在运行时切换实现的一种方法是提供一个创建bean的工厂方法。要使用它,不使用@component@service注释服务类,而在@configuration类上提供如下方法:

@Bean
public ApplicationRunner getApplicationRunner() {
    // read the env var
    // select the desired implementation to be used         
}

这篇博文有一个关于这种技术的很好的例子:https://www.intertech.com/blog/spring-4-condition-bean-configuration/

 类似资料:
  • 问题内容: 这个问题是我继续研究Docker的一部分,并且在某些方面跟进了我先前的问题之一。我现在已经了解了如何通过将一堆Docker容器链接在一起来获得完整的应用程序堆栈(实际上是微型VPS)。例如,可以创建一个堆栈,为Apache+ PHP5提供一堆扩展名+ Redis + MemCached+MySQL,它们都在Ubuntu上运行,无论是否带有附加数据容器,都可以轻松地序列化用户数据。 一切

  • 本文向大家介绍C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance),包括了C#实现只运行单个实例应用程序的方法(使用VB.Net的IsSingleInstance)的使用技巧和注意事项,需要的朋友参考一下 从 <<Windows Forms 2.0 Programming, 2nd Edition>>   -  Single-Instance Applicat

  • 如何在同一台服务器上独立运行多个web应用程序? docker是正确的方法(请举例说明)还是矫枉过正? 有没有其他选择我应该考虑? 我还需要考虑其他问题(潜在问题、解决方案)吗?

  • 我已经开始学习Java,在尝试运行我的第一个程序时遇到了一个问题,如下所示: 在Eclipse光子上,我在运行时遇到以下错误: 我看了看,在bin目录中有我的. class文件,在目录中有我的. java文件。 这正常吗?我该如何解决这个问题?

  • 问题内容: 有没有一种Python方式可以只运行一个程序实例? 我想出的唯一合理的解决方案是尝试将其作为服务器在某个端口上运行,然后尝试将第二个程序绑定到同一端口-失败。但这不是一个好主意,也许有比这更轻巧的东西了吗? (考虑到程序有时可能会失败,例如segfault-因此“锁定文件”之类的东西将无法工作) 问题答案: 以下代码可以完成此工作,它是跨平台的,并且可以在Python 2.4-3.2上

  • 本文向大家介绍C#实现托盘程序并禁止多个应用实例运行的方法,包括了C#实现托盘程序并禁止多个应用实例运行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现托盘程序并禁止多个应用实例运行的方法。分享给大家供大家参考,具体如下: 托盘程序的制作: 1.把NotifyIcon控件拉一个到窗体上,并设置NotifyIcon的Icon(很重要!否则运行后看不到效果) 2.窗体关闭时,将程