Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有两个入口点的Spring引导应用程序:CLI和Web服务_Java_Spring_Spring Boot - Fatal编程技术网

Java 具有两个入口点的Spring引导应用程序:CLI和Web服务

Java 具有两个入口点的Spring引导应用程序:CLI和Web服务,java,spring,spring-boot,Java,Spring,Spring Boot,我创建了一个spring boot starter应用程序,它是作为CommandLineRunner启动的,在Kubernetes中作为CronJob运行,类似于: @springboot应用程序 @启用自动配置 公共类JobApplication实现CommandLineRunner{ Logger Logger=LoggerFactory.getLogger(JobApplication.class); 公共静态void main(字符串[]args){ ConfigurableAppli

我创建了一个spring boot starter应用程序,它是作为CommandLineRunner启动的,在Kubernetes中作为CronJob运行,类似于:

@springboot应用程序
@启用自动配置
公共类JobApplication实现CommandLineRunner{
Logger Logger=LoggerFactory.getLogger(JobApplication.class);
公共静态void main(字符串[]args){
ConfigurableApplicationContext上下文=SpringApplication.run(JobApplication.class,args);
context.close();
}
@凌驾
公共无效运行(字符串…参数)引发异常{
//执行任务
}
}
我目前在Dockerfile中运行应用程序,就像这样,一切正常

CMD java -jar /job/job.jar
在这个应用程序中,我希望使用一些数据库代码和DTO并将其作为SpringWeb服务公开,最好是在同一个代码库中,这样我就不必创建多个Github repo和Java项目,也不必发布两者都使用的共享库。我希望保持它的简单性,并且能够直接编译和使用它们

有办法吗?我想我需要第二个WebApplication类,但我不确定如何执行它,所以它使用它而不是作业


如果没有,是否有推荐的方法来完成我想做的事情(如果这是唯一的方法,构建多个JAR是可以的……但我真的希望将所有代码保留在同一个项目中)?

您是否尝试过使用
@Profile

例如:

@Profile("CMD")
@SpringBootApplication
@EnableAutoConfiguration
public class JobApplication implements CommandLineRunner {
  Logger logger = LoggerFactory.getLogger(JobApplication.class);


  public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(JobApplication.class, args);
    context.close();
  }

  @Override
  public void run(String... args) throws Exception {
    // run the job
  }
}


@Profile("WEB")
@SpringBootApplication
public class WebApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}
您可以以
java-jar/job/job.jar-Dspring.profiles.active=CMD启动命令行

和网页与个人资料网页

由于
@Profile
是一个运行时spring注释,因此在加载spring上下文之前无法对其进行处理,因此(正如您所发现的)

无法从以下候选人中找到一个主类[my.app.WebApplication,my.app.JobApplication]

因此,您可以使用

-Dstart class=com.sample.WebApplication


现在它不应该加载第二个,因为现在
@Profile
应该可以工作了

不幸的是,我遇到了以下错误:无法使用您的原始注释(Profiles)结合-Dstart class=com.sample.WebApplication从以下候选对象[my.app.WebApplication,my.app.JobApplication]中找到一个主类,成功了!有你的支持的综合回答