我想使用Spring Boot开发示例REST API项目。我感到困惑,因为war
,jar
等包装有多种选择,应该是正确的方法。
我要求我在外部库文件夹中具有多个jar
和资源文件,这些文件将在REST API和前端(使用React)中使用。
由于罐子和资源的动态变化,我想将罐子和资源保留为外部依赖项,并且我不想将它们包括在项目中。我已经尝试过使用loader.path
和jar
来使用war
的示例项目,但是同样的方法不适用于war
文件。我正在使用Maven作为构建工具。
jar
或lib
应该使用什么?DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
文件夹-我找不到解决方案。答案 0 :(得分:12)
您应该将其设置为可执行的Spring Boot JAR。
仅在必须将其部署在Java EE服务器上时才需要WAR。
使用Maven很好。让它管理您的依赖关系并构建程序包。
您想找到一个Maven插件,该插件创建具有内部依赖关系的可执行JAR。
更新:
这是我对您的四个问题的答复:
mvn install
将您声称需要的所有这些外部库放置在本地.m2或Maven存储库中。我建议您考虑单独部署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>
中,可以构建jar
和jar-with-dependencies
软件包。
要使用mvn clean package
命令构建软件包。
答案 3 :(得分:1)