Java Spring Boot应用程序组织的最佳实践是什么?

Java Spring Boot应用程序组织的最佳实践是什么?,java,spring-boot,deployment,Java,Spring Boot,Deployment,我一直在使用Eclipse作为IDE开发Spring Boot应用程序(我认为这并不特别相关),到目前为止,所有测试都是通过从IDE启动来完成的。这对于开发来说很好,但是现在应用程序需要是“可部署的”(即以某种方式打包,放在测试系统上,解包,配置和运行) 是否有组织已部署应用程序的推荐方法或“最佳实践”方法 是否应该将应用程序资源组织成一个“已知”的特定目录结构,以便在启动时可以找到所需的一切?是否存在必须以特定方式命名的资源文件 现状 为了实现这个目标,我创建了一个shell脚本(Linux是

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

是否有组织已部署应用程序的推荐方法或“最佳实践”方法

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

现状

为了实现这个目标,我创建了一个shell脚本(Linux是目标操作系统)来启动这个程序,并修改了我的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似乎必须期望这种结构(或者类似的结构)

因此:


src/
主要/
爪哇/
资源/
log4j2.xml
application.yml
等

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

Spring Boot文档描述了如何安装到Linux。maven构建产生的单个工件具有spring boot查找它们的依赖库和资源

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

您不需要解包任何东西来运行应用程序。罐子里的东西留在罐子里。这就是maven插件(在该链接中提到)所做的

一旦服务器上有了构建工件,就需要添加配置(例如db user/pass等),并将其集成到centos的服务管理中,该文档也对其进行了描述


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

我已简要浏览了所提供链接中的信息。我不认为这是我想要做的。我并不是想把它变成一个“服务”,而是希望能够像其他Java程序一样启动它。请参见该链接中的第二个链接:“除了使用java-jar运行Spring引导应用程序外,还可以为Unix系统生成完全可执行的应用程序。完全可执行的jar可以像任何其他可执行二进制文件一样执行。“这不是你想要的吗?我想我不明白“完全可执行的jar”这个词是什么意思。这与通过“java-jar app.jar”运行程序有什么区别?为什么不直接通过“java-jar”运行它?也不清楚这个jar中到底打包了什么(使用链接中描述的技术)。它是否包含资源(即您在/src/main/resources中找到的内容)?文档该部分的最后一句话:“然后您可以通过键入
/my application.jar
(其中
我的应用程序
是您的工件的名称)来运行您的应用程序。“您可以选择执行
java-jar my application.jar
。如果这是您想要的,您可以在文档中该部分描述的maven配置中省略
true
。然后您将拥有一个jar。
<project>
  src/
    main/
      java/
        <java code contained in a package hierarchy>
      resources/
        <various needed resource files>
        log4j2.xml
        application.yml
        etc.