Spring Boot应用程序组织的最佳做法是什么?

时间:2019-10-22 15:59:29

标签: java spring-boot deployment

我一直在使用Eclipse作为IDE开发Spring Boot应用程序(并不是我认为特别重要),到目前为止,所有测试执行都是通过从IDE启动来完成的。对于开发来说,这很好用,但是现在应用程序需要“可部署”(即以某种方式打包,放置在测试系统上,解压缩,配置并运行)。

是否存在建议的或“最佳实践”方式来组织已部署的应用程序?

是否应将应用程序资源组织为“已知”的某个目录结构,以便在启动时可以找到所需的所有内容?是否有必须以特定方式命名的资源文件?

现状

为了实现这个目标,我创建了一个Shell脚本(Linux是目标OS)来启动该程序,并修改了我的maven构建以收集必要的资源(例如jar依赖项,application.yml,log4j2.xml等)。将所有这些压缩并放到目标测试Linux机器上。

解压缩归档文件后,几乎所有内容都位于“根目录”中。当我尝试执行该程序时,该程序确实会执行(并迅速退出并出现错误),但是我认为有些问题可能是由于运行时无法正确访问其所需的资源。这只是一个猜测。

这是一个例子:

解压后的拉链:

[centos@route-assessor route-assessor]$ ls -l
total 41016
-rw-r--r--. 1 centos centos     1017 Oct 21 11:34 application.yml
-rw-r--r--. 1 centos centos  5059429 Oct 21 15:05 elastic-apm-agent-1.10.0.jar
drwxr-xr-x. 2 centos centos     8192 Oct 22 10:38 lib
-rw-r--r--. 1 centos centos     1975 Oct 22 15:12 log4j2.xml
drwxrwxr-x. 2 centos centos       71 Oct 22 15:12 logs
drwxrwxr-x. 2 centos centos       62 Oct 22 15:12 metrics
-rwxr-xr-x. 1 centos centos      740 Oct 22 15:09 run-route-assessor.sh
-rw-r--r--. 1 centos centos 36909394 Oct 22 10:38 services-0.0.1-SNAPSHOT.jar

更新

好吧,也许“部署”不是我应该使用的术语。我不打算将应用程序“部署”或“安装”到机器上,我只是将zip归档文件放到其上,解压缩,进行一些配置并运行它。

话虽如此,我的问题是关于(或没有)关于如何组织未压缩结果中的伪像的建议做法。

例如,在eclipse项目中,该项目被构造为Maven“友好”的,并且看来Spring必须期望这种结构(或类似的东西)。

所以:

<project>
  src/
    main/
      java/
        <java code contained in a package hierarchy>
      resources/
        <various needed resource files>
        log4j2.xml
        application.yml
        etc.

在“打包”应用程序时,是否应维护这样的目录结构?换句话说,JVM / Spring Boot“运行时”是否期望看到这样组织的资源?

1 个答案:

答案 0 :(得分:0)

spring-boot文档描述了如何安装到Linux here。从maven构建中生成的 single 工件具有依赖库和资源,而spring-boot会在其中找到它们。

  

是否应将应用程序资源组织为“已知”的某个目录结构,以便在启动时可以找到所需的所有内容?是否有必须以特定方式命名的资源文件?

您无需解压缩任何文件即可运行该应用程序。 。 。罐子里的东西留在罐子里。这就是该链接中提到的maven插件。

一旦在服务器上有了构建工件,就需要添加配置(例如db用户/通过等),并将其集成到doc也描述的centos的服务管理中。

如果这是您的最终目标,那么该文档还描述了如何将您的应用程序发布到云平台。

相关问题