在 Spring Boot 中将 Angular 环境变量传递给已编译的静态 Angular 文件

2023-12-12

我现在使用 Angular 和 Spring Boot 来构建网站项目。当我们部署时,我们将ng build --output-path=../spring-boot-project/src/main/resources/static",Angular 并在 Spring Boot 中生成静态文件夹,例如/resource/static。然后我们构建一个 .jar 文件并将其部署到我们的产品(或实验室)环境中。

因此,当我们运行 .jar 文件时,如何将一些环境变量传递给 Angular 部分(Spring Boot 项目中的静态文件)。

更具体地说,我想在 Spring Boot application.yml 中设置角度环境:

spring:
  profiles:
    active: dev
  main:
    banner-mode: "off"

---

spring:
  profiles: dev
angular.v1: "something1_dev"
angular.v2: "something2_dev"


---

spring:
  profiles: prod
angular.v1: "something1_prod"
angular.v2: "something2_prod"

我怎样才能将这些值(由于不同的轮廓而有不同的值)传递到有角度的一侧?


将配置外部化到单独的文件

创建文件settings.js in assets这将保存你的环境变量:

const GlobalSettings = {
   ... your settings values
}

将此文件添加到您的index.html所以启动时会自动加载(但不会被Webpack打包)。

<script src="assets/settings.js" type="application/javascript"></script>

在你的代码中GlobalSettings然后将在全球范围内提供。

注入内容settings.js进入环境

如果您更喜欢使用 Angular 应用程序内部的环境,您可以覆盖环境的特定属性main.ts:

environment.someProperty = GlobalSettings.someProperty;
... bootstrap Angular

现在您可以通过替换来更改设置settings.js而不必重建整个应用程序。

使用环境变量编辑文件

Use envsubst替换你的变量settings.js

// settings.template.js
const GlobalSettings = {
  someProperty: "${SOME_PROPERTY}"
}

// command that starts your server, e.g. docker command
envsubst < settings.template.js > settings.js && <command to start webserver>

如果您将 Angular 应用程序放在 Java jar 中,这显然不起作用。

Provide settings.js通过 Spring 后端

不要将文件复制到static目录(因此不在 jar 中)。

相反,在您的 Java 应用程序中创建一个端点来侦听/assets/settings.js。 在这里您可以使用所有 Java/Spring 魔法(包括读取环境变量)来组装settings.js与所需的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring Boot 中将 Angular 环境变量传递给已编译的静态 Angular 文件 的相关文章

随机推荐

  • 为什么 C# 没有检测到 1970/1/1 处于 BST 之下?

    我正在使用第 3 方 API 该 API 将一天中的时间值返回为日期时间值 并填写 1970 年 1 月 1 日作为日期部分 所以对于凌晨 5 点 它会返回类似的内容1969 12 31T21 03 00 000 08 00 问题是 如果用
  • Gmail电子邮件发送c#

    当我尝试向同一电子邮件发送消息时 此代码有效 但在其他电子邮件中 则无法正常工作 var smtpClient new SmtpClient smtp gmail com Port 587 UseDefaultCredentials fal
  • 围绕 d3 地图投影创建弯曲边框

    我使用所示的 geoNaturalEarth1 在 d3 中创建了一张世界地图here 我使用带有此投影的 geojson 世界地图来获取地图 如下面的代码所示 然而 这表明各国漂浮在太空中 没有边界 我想在地图投影周围绘制边框 使其看起来
  • 将行开头的所有制表符匹配并替换为四个空格

    我在网站上阅读了一些其他问题和答案 但它们都与我所寻求的有点不同 用四个空格替换字符串开头的所有制表符 到目前为止我尝试过的 let m t tsomething t 查找标签并不难 t g 但这会得到不在行首的制表符 所以使用m matc
  • 如何在 Jupyter 笔记本中以编程方式生成 Markdown 输出?

    我想在 Jupyter 笔记本中写一份课程报告 我想计算一些东西 生成一些结果并将它们包含在降价中 我可以将单元格的输出设置为降价吗 我想要这样的命令 print phi 生成 phi 符号 就像在 Markdown 中一样 换句话说 我想
  • 关闭 Visual Studio 中的漂亮列表

    我有一个宏 插件 我需要在其中禁用 Vb Net漂亮的清单暂时的 尝试录制宏 但它只显示我打开了选项对话框 也尝试过 Dim props As EnvDTE Properties DTE Properties TextEditor Basi
  • GitLab CI 的 Docker 构建作业参数无效

    所以我正在尝试设置我的 Gitlab CI 来触发一个作业git push构建和部署我的 Docker 这是 gitlab ci yml我正在使用的文件基于 Gitlab 文档 Elixir yml 中的示例 stages build bu
  • 获取有关 WCF 中需要很长时间的方法的进度信息的有效模式?

    我想要获取有关 WCF 上调用的方法的进度更新 例如 我运行 1000 个查询并想知道当前状态 如果双工合约在您的环境中不可行 您将不得不诉诸轮询 您的初始方法可以返回一个标识符 可能是 GUID 然后您可以对另一个方法进行后续调用以检查进
  • 如何在Mac上运行shell命令?

    如何使用 Excel VBA 代码运行 shell 命令 我想跑chmod x Users asdasd Music playlistLoad sh穿过外壳 我使用 Python 实现了这一点os system Command here 在
  • 如何在 C# 中进行参数化 SELECT 查询?

    我正在尝试使用 DataGridView 以及 C 和 SQL Server 中的参数化查询来显示数据库中表中的数据 到目前为止 我已经尝试过这段代码 private void button1 Click object sender Eve
  • 复杂对象图的快速哈希码

    我有一个漂亮的复杂的物体我需要得到独特性这些物体 一种解决方案可以通过重写来完成GetHashCode 我已经实现了如下代码 public override int GetHashCode return this complexObject
  • 使用 System.IO.Compression.FileSystem 将完整目录添加到现有 zip 文件

    以下示例可在互联网和本网站上追溯 作为使用 NET Framework 4 5 压缩文件的解决方案 它可以工作 但是当存档已经存在时 它会给出错误 因为它似乎只能压缩文件夹并创建新的 zip 文件 Reflection Assembly L
  • Apache Commons Validator 帮助下的 NoClassDefFoundError 问题

    如果使用 Apache Commons Validator 会出现错误 java lang NoClassDefFoundError org apache oro text perl Perl5Util 即使 Apache Commons
  • 如何在 RestAssured 中设置 OAuth 领域

    我正在使用 RestAssured 库来自动化 NetSuite Restlet 此 Restlet 使用 OAuth 1 0 进行身份验证 除了消费者密钥 消费者秘密 访问令牌和令牌秘密之外 我还需要设置 REALM 等高级字段 但我找不
  • 构造一个没有默认构造函数的空对象

    假设我有一个类型F 我知道F是空的 但是F没有默认构造函数 所以我不能使用F 来构建它 有没有办法获得类型的有效对象F反正 我似乎记得有人提到过有一种神秘的联合用法 理想情况下 它会是constexpr友好的 这可能很有用 因为无捕获 la
  • Android - listView 中的单选按钮?

    我有一个场景 我们应该在列表视图中有一个单选模式单选按钮 当我单击单选按钮时 它应该进入启用状态 当我单击整个项目时 它应该重定向到新活动 我参考了下面的链接 link1 link2 我可以找到多项选择模式的方法 但不适用于单选模式 对此有
  • nVIDIA 驱动程序如何将设备索引分配给 GPU?

    假设在单个节点上 有多个具有不同计算能力的设备 nvidia如何对它们进行排名 我的排名是指cudaSetDevice分配的数字 有关于此的一般准则吗 谢谢 我相信对应的设备顺序cuda获取设备 and cudaSetDevice 即 CU
  • 在 QML TableView 中单击时编辑数据(如 Excel)

    我有一些代码 import QtQuick 2 2 import QtQuick Window 2 1 import QtQuick Controls 1 2 Window visible true width 538 height 360
  • 无法在 AppService 中使用 Active Directory 集成身份验证连接到 Azure SQL Server

    我们在 Azure 应用服务上部署了 Web 应用程序 我们的数据库也在 Azure 上 配置为使用 AAD 身份验证 我们已分配 AAD 管理员 我们在 Web 应用程序中使用下面的连接字符串来使用下面的连接字符串连接到该服务器和数据库
  • 在 Spring Boot 中将 Angular 环境变量传递给已编译的静态 Angular 文件

    我现在使用 Angular 和 Spring Boot 来构建网站项目 当我们部署时 我们将ng build output path spring boot project src main resources static Angular