【问题标题】:Spring Boot war deployment with Angular app as static resource使用 Angular 应用程序作为静态资源的 Spring Boot 战争部署
【发布时间】:2019-08-27 17:23:18
【问题描述】:

我有一个 Spring Boot 后端和一个 Angular 前端应用程序,只需将 Angular 应用程序复制到 Spring Boot 应用程序的 resources/static 文件夹中,就可以成功地从它们创建一个可运行的 jar 文件。

运行 jar 工作正常,我可以访问 localhost:8000 上的应用程序(因为我将 server.port 属性设置为 8000)并且它按预期工作。

现在我想创建一个可部署的 war 文件而不是可运行的 jar 并在 Tomcat 中部署应用程序,所以我应用了 war 插件并声明了以下 gradle 依赖项(根据 @ 987654321@):

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'

现在构建成功生成了一个war文件,Tomcat可以部署和启动它而没有任何错误。部署后,应用程序可在localhost:8080/myapp

问题是当我实际打开应用程序时,它似乎试图从错误的位置获取 Angular 资源,从而导致 404 错误:

如您所见,它尝试从 localhost:8080/filename 获取 Angular 文件,但我认为它应该是 localhost:8080/myapp/filename(虽然我不确定)。

我尝试将server.servlet.context-path 属性更改为/myapp,但没有效果(我猜它只会影响嵌入式容器)。

我非常感谢任何有关如何解决此问题的建议。

【问题讨论】:

    标签: java angular spring spring-boot


    【解决方案1】:

    我已经设法解决了。

    首先,我必须将 Angular 应用程序的 index.html 中的基本 href 从 / 更改为 ./,如下所示:

    <base href="./">
    

    在此更改之后,Angular 资源不再抛出 404 错误,但后端端点仍然如此。

    我的 environments.prod.ts 中有以下内容:

    export const environment = {
      production: true,
      API_URL: '/api'
    };
    

    我通过这个API_URL 调用我的后端端点,所以我也必须以类似的方式更改它:

    API_URL: './api'
    

    这些更改后一切正常。

    【讨论】:

      猜你喜欢
      • 2018-08-11
      • 2018-06-07
      • 2019-03-23
      • 2017-09-21
      • 1970-01-01
      • 2017-12-21
      • 2016-03-23
      • 1970-01-01
      • 2015-09-07
      相关资源
      最近更新 更多