Spring 引导 war 或用于休息的 jar api 项目

Spring Boot war or jar for rest api project

我想使用 Spring Boot 开发示例 REST API 项目。我很困惑什么才是正确的方法,因为我们有多种包装选项,例如 warjar

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

由于 jar 和资源的动态变化,我想将它们保留为外部依赖项,并且我不想将它们包含在项目中。我尝试过使用 loader.pathjar 的示例项目,效果很好,但同样的方法不适用于 war 文件。我正在使用 Maven 作为构建工具。

  1. 在 Spring 引导中应该采用什么方法来实现?
  2. 需要 2.xx 版本
  3. 中的工作示例
  4. 应该使用什么warjar
  5. 如何配置 IDE (Eclipse / IntelliJ) 以使用外部 lib 文件夹和 Spring 引导 - 我找不到解决方案。

您应该将其设为可执行文件 Spring Boot JAR。

如果必须将其部署在 Java EE 服务器上,则只需要 WAR。

很高兴您使用 Maven。让它管理您的依赖项并构建包。

您想找到创建可执行 JAR 的 Maven 插件,其中包含依赖项。

更新:

以下是我对您的四个问题的回复:

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

建议大家考虑单独部署REST服务,让React前端调用。解耦两者。让 REST 服务成为一个独立的微服务,没有 UI.

您可以使用 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 包。

要构建包,请使用 mvn clean package 命令。

选择 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>

附录-

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