0

我正在开发两个独立的 Java Web 应用程序 - A 是网站,B 是后端服务。两者都部署在运行 Tomcat 的不同机器上。

A 使用 REST 调用访问 B。

我有单独的机器用于开发、测试和生产。如何管理这两个应用程序的开发、测试和生产环境的部署?在部署应用程序之前,我经常需要更改 Java 和 JavaScript 代码中的 URL 以指向正确的服务器。

考虑的选项:1)我考虑过使用此处描述的系统环境变量。这适用于 Java 端,但在我的网站 A 中有调用后端服务器 B 的 REST API 的 JavaScript 代码。我不知道如何从我的 JavaScript 代码访问在 Java 级别定义的 URL。有吗?

2)在代码中使用占位符来替换在构建期间被实际 URL 替换的 URL(ant?)。同样,不确定这是否适用于 JavaScript 代码。

这一定是一个常见问题,但进一步的谷歌搜索并没有给我关于人们如何解决这个问题的具体提示。感谢任何指针。

4

2 回答 2

1

使用Replace 任务构建简单的 ant来替换 javascript 文件中的 API 端点 URL 字符串就可以了。您将在构建配置文件中为 dev、prod 等维护一个单独的配置设置,并且您可以使用该配置作为选项触发构建。

当您将 JS 文件复制到其最终部署目标时,请查看有关过滤器链的此SO 答案以进行替换。

在您的 JS 文件中:

var APIURL = "@APIURL@";

以下是替换操作的示例:

<!-- holds your API endpoints based on configuration parameter -->
<property file="${config}.properties" />
<!-- does the replacement -->
<copy src="/path_to_main_js_file" dest="/path_to_final_package_js_file"
   <filterchain>
     <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
       <param type="token" name="APIURL" value="${apiurl}"/>
     </filterreader>
   </filterchain>
 </copy>

例如

ant -Dconfig=dev package

或者,您也可以使用不同的目标来在内部加载正确的配置文件的 dev、prod、staging。

ant package-dev

您在 Java 端使用环境变量的方法似乎是一个好方法。

于 2013-02-23T20:08:58.940 回答
0

ZooKeeper是管理配置的好方法,但可能会过度满足您的需求。

就像您提到的解决方案一样,在构建时使用 ant 生成 URL 是另一个可行的解决方案。我已经直接使用了这个(以及 ZooKeeper);它很简单,但并非没有缺点。至少这意味着您需要为开发、测试和生产单独构建。

如果您不使用单独的构建,您将需要一些基本的钩子来了解代码运行的环境。系统环境变量可以很好地解决这个问题。

Twelve-Factor App配置部分不能直接回答您的问题,但绝对值得一读。

于 2013-02-23T19:59:06.307 回答