Spring Boot War或用于其他api项目的jar

时间:2018-08-02 12:44:27

标签: java reactjs spring-boot maven-2

我想使用Spring Boot开发示例REST API项目。我感到困惑,因为warjar等包装有多种选择,应该是正确的方法。

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

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

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

4 个答案:

答案 0 :(得分:12)

您应该将其设置为可执行的Spring Boot JAR。

仅在必须将其部署在Java EE服务器上时才需要WAR。

使用Maven很好。让它管理您的依赖关系并构建程序包。

您想找到一个Maven插件,该插件创建具有内部依赖关系的可执行JAR。

更新:

这是我对您的四个问题的答复:

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

我建议您考虑单独部署REST服务,并让React前端对其进行调用。将两者解耦。让REST服务成为无需UI即可独立存在的微服务。

答案 1 :(得分:5)

选择jar还是war取决于您是否需要独立的可执行应用程序,还是要在Weblogic之类的服务器上部署项目。假设我的应用程序是复杂项目的中间层还是适配器(辅助应用程序),那么我会将其作为战争部署在WebLogic上。

在您的情况下,我的建议是使用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>

附录-

答案 2 :(得分: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软件包。

要使用mvn clean package命令构建软件包。

答案 3 :(得分:1)

  1. 如果您需要一个独立的应用程序,请装一个罐子。
  2. 如果您需要在服务器中进行部署,那就去战争吧。