Spring Boot Rest API项目应该选择war文件还是jar文件?

7

我想使用Spring Boot开发示例REST API项目。我对应用打包有多个选项,如warjar等,感到困惑。

我的要求是,我有一个外部库文件夹,其中有多个jar和资源文件,将在REST API和前端(使用React)中使用。

由于它们的动态变化,我希望将Jars和资源作为外部依赖项,并且不想将它们包含在项目中。我尝试过使用loader.pathjar的样本项目,可以正常运行,但相同的方法无法在war文件中使用。我使用Maven作为构建工具。

  1. 在Spring Boot中实现这一点的正确方法是什么?
  2. 需要2.xx版本的工作示例
  3. 应该使用war还是jar
  4. 如何配置IDE(Eclipse / IntelliJ)以使用Spring Boot的外部lib文件夹-我找不到解决方案。
4个回答

16

你应该将其创建为可执行的Spring Boot JAR。

只有在必须部署到Java EE服务器上时才需要WAR。

很好,你正在使用Maven。让它管理你的依赖项并构建包。

你需要找到创建带有内含依赖项的可执行JAR的Maven插件。

更新:

以下是我的回答:

  1. 不要混合使用Maven和/lib。最好使用mvn install 将你声称需要的所有外部库放在本地的.m2或Maven存储库中。
  2. 请参见Spring Boot指南获取工作示例。也许服务和React前端应该是分开的包和部署。
  3. 这是Spring Boot,而不是Java EE。使用可执行JAR,而不是WAR。
  4. 请参阅建议1。将那些JAR安装到Maven中。不要混合使用。

我建议你考虑单独部署REST服务,并让React前端调用它。将两者解耦。让REST服务成为一个可以独立存在且没有UI的微服务。


谢谢您的回答,我会尝试链接到工作示例并向您更新。 - Karim Narsindani

5
选择使用jar或war取决于您是想要一个独立的可执行应用程序还是想要将项目部署在像Weblogic这样的服务器上。假设如果我的应用程序是复杂项目的中间层或适配器(辅助应用程序),我会将其部署在WebLogic上作为war。
对于您的情况,我建议您使用JAR而不是WAR。要构建jar,请使用mvn clean install命令。
为了加载外部属性文件,您需要将文件夹名称和属性名称作为命令行参数传递,如下所示:
java -jar myapp.jar --spring.config.name=application,myapp
-- spring.config.location=classpath:/data/myapp/config,classpath:/data/myapp/external/config

为了外部导入资源,您可以使用:
Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");

代码片段

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

public class CustomResourceLoader implements ResourceLoaderAware
{

    private ResourceLoader resourceLoader;

    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }

    public void showResourceData() throws IOException
    {
        //This line will be changed for all versions of other examples
        Resource banner = resourceLoader.getResource("file:c:/temp/filesystemdata.txt");

        InputStream in = banner.getInputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(in));

        while (true) {
            String line = reader.readLine();
            if (line == null)
                break;
            System.out.println(line);
        }
        reader.close();
    }
}

这个文件的applicationContext.xml条目如下:

<bean id="customResourceLoader" class="com.howtodoinjava.demo.CustomResourceLoader"></bean>

appendix-


1
感谢Shubham的回答,这对我来说似乎有效。 - Karim Narsindani

5
  1. 如果您需要一个独立的应用程序,请选择jar格式。
  2. 如果您需要在服务器上部署,请选择war格式。

(注:jar和war是Java中常见的文件格式,用于打包和部署应用程序)

1
你可以使用Apache Maven Assembly Plugin创建包含依赖项的可执行JAR文件。
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>${mainClass}</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

将以下内容添加到您的pom.xml<build></build>元素内,可以构建jarjar-with-dependencies包。请保留HTML标签。
要构建包,请使用mvn clean package命令。

我尝试了你的示例代码,但它会创建带有依赖项的jar包,而我不需要这样,我想要创建一个没有依赖项的Spring-Boot jar包,并且所有依赖项都应该被复制到lib文件夹中。我在Maven中找到了一个选项,可以创建没有依赖项的jar包,并将所有所需的jar包复制到lib文件夹中。 - Karim Narsindani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接