将Spring Boot服务器和Angular CLI应用程序集成到单个可执行文件中

时间:2019-02-12 02:41:18

标签: angular spring-boot

我设计了一种解决方案,其中包含websocket功能的spring boot应用程序从客户端接收套接字连接,而从Angular CLI应用程序使用REST API调用。

现在,Spring Boot单独运行,而角度CLI则单独执行(npm start)。

任何想法我都可以将两者集成到一个可执行文件中,例如dist war或其他东西,这样我就可以同时启动和运行两者。

1 个答案:

答案 0 :(得分:1)

我有一个项目,该项目使用Spring Boot作为后端,并且在前端使用了角形。我使用Spring提供角度服务。因此,可以根据需要生成.jar.war

我将其集成的方法如下:要在春季提供角度服务,您需要使用ng build --prod构建项目,并在春季将此处生成的所有文件复制到静态文件夹。尽管如此,您仍需要调整路径,即定义角度和弹簧的响应性。

要调整路线,您可以包括以下配置:

@Configuration
public class AngularConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

      registry.addResourceHandler("/**/*")
        .addResourceLocations("classpath:/static/")
        .resourceChain(true)
        .addResolver(new PathResourceResolver() {
            @Override
            protected Resource getResource(String resourcePath,
                Resource location) throws IOException {
                Resource requestedResource = location.createRelative(resourcePath);
                return requestedResource.exists() && requestedResource.isReadable() ? requestedResource
                : new ClassPathResource("/static/index.html");
            }
        });

    }
}

在开发阶段,构建角度非常无聊。因此,非常需要使用ng serve(当然,要启用spring服务器)。当角度cli在localhost:4200上运行并在localhost:8080上运行时,您必须在地址之间进行代理(我想您已经这样做了,但是无论如何...)

1)在项目根目录中,您必须包含一个名为proxy.conf.json的文件,其中包含:

{
    "/api": {
        "target": "http://localhost:8080",
        "secure": false
    }
}

2)接下来,在文件package.json中,将"start": "ng serve"替换为"start": "ng serve --proxy-config proxy.conf.json"

您去了!应该可以。

最后,复制和粘贴构建非常无聊。因此,如果您使用的是Maven,则可以包含一条规则,以便在每次启动Spring时都可以使用。将其放入您的pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                      <execution>
                          <id>copy-resources</id>
                          <phase>validate</phase>
                          <goals><goal>copy-resources</goal></goals>
                          <configuration>
                              <outputDirectory>${basedir}/src/main/resources/static/</outputDirectory >
                              <resources>
                                  <resource>
                                      <directory>${basedir}/../frontend/dist</directory >
                                  </resource>
                              </resources>
                          </configuration>
                      </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

当然,您应该根据自己的项目设置路径。

建立角度后执行弹簧。如果您使用的是maven,请执行以下操作:mvn package

如果您还有其他疑问,请告诉我! 祝你好运。