如何使用spring boot创建不可执行的库(jar)?

时间:2016-10-18 23:15:46

标签: java spring spring-boot cloudfoundry pivotal-cloud-foundry

我正在开发一个应用程序并在云代工厂部署。在内部,我们的团队开发了3个自定义依赖项。

所有3个依赖项都是启动项目,并且具有@Configuration

  • 依赖关系1是与Couchbase进行交互。此依赖关系的来源是启动项目。
  • 依赖关系2是与FluentD交互以进行日志记录。此依赖关系的来源是启动项目。
  • 依赖关系3是与外部休息服务交互。此依赖关系的来源是启动项目。
  • 依赖关系4具有以上3个依赖关系,并且具有很少的utils类和常量。

我在具有WebMVC实现的多个Web应用程序中使用此依赖关系4。

在我的本地机器上一切正常。但是,当我在云上推送这个Web应用程序时,有时库会在Web应用程序之前执行,这会间歇性地崩溃我的应用程序。好东西应用程序在几秒钟内恢复。

我在我的库(jars / dependencies)中做了以下更改,并在云上尝试过。执行这些更改后,应用程序崩溃的比例会降低,但不幸的是,它有时会崩溃,我可以在应用程序之前看到依赖项被执行。

  • 在库的build.gradle中添加了bootRepackage.enabled = false bootRepackage.withJarTask = jar
  • 从图书馆中取出并添加到我的网络应用程序中 springBoot { mainClass =“com.java.Application” executable = true }
  • 从库(依赖项/ jar)中取消@SpringBootApplication。它现在就在我的网络应用程序中。

我不知道这些是使启动依赖项不可执行的唯一步骤,否则我将不得不做其他事情。如果我遗失了什么,请告诉我。

以下是我的一个依赖项的示例关闭应用程序类。

import org.springframework.context.annotation.ComponentScan;

  @ComponentScan
  public class LoggingApplication {

  }

Sample of Web application main class.
  @SpringBootApplication
  @EnableWebMvc
  @Import(LoggingApplication.class) 
  public class Application {


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

1 个答案:

答案 0 :(得分:0)

您没有公开堆栈跟踪,也没有提供"崩溃"的任何细节。所以看着我的水晶球,这听起来就像你在Spring IoC容器的接线阶段做了一些工作。这"工作"应该移动到SELECT * FROM ClaimDetails WHERE ISDATE(ActualDate) = 0 处理程序,以便确保在完全创建和初始化Spring Context之后执行它。