【问题标题】:How can I switch between dev and test server in Tomcat and JavaScript?如何在 Tomcat 和 JavaScript 中的开发和测试服务器之间切换?
【发布时间】:2013-02-09 07:05:30
【问题描述】:

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

A 使用 REST 调用访问 B。

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

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

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

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

【问题讨论】:

  • 在主 JS 文件中使用 API 端点的替换字符串构建系统是我的做法。

标签: java javascript tomcat deployment production-environment


【解决方案1】:

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

查看此SO answer,了解在将 JS 文件复制到其最终部署目标时进行替换的过滤器链。

在你的 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 端使用环境变量的方法似乎是个好方法。

【讨论】:

  • 我正在使用 Eclipse 进行开发。我想我可以在 Eclipse 中为 Java 端设置相同的环境变量。无论我的 Ant 替换任务对我的 JavaScript 做了什么,我有什么想法可以在 Eclipse 中复制吗?
  • 查看我上面的编辑:Ant 细节。回复:Eclipse 集成,这可能会有所帮助:help.eclipse.org/juno/…
  • 虽然基于 Ant 的替换肯定会起作用,但我不喜欢为我的环境构建单独的 WAR 文件。我决定采取不同的方式,让我的网站检测它当前运行的位置(JavaScript window.location.hostname)并相应地发出后端服务器请求。不过感谢您的指点。
【解决方案2】:

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

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

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

The Twelve-Factor AppConfig section 不能直接回答您的问题,但绝对值得一读。

【讨论】:

  • 正如您所指出的,ZooKeeper 对我来说有点矫枉过正。十二因素应用程序链接非常有用。感谢分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2018-05-01
  • 2013-09-22
相关资源
最近更新 更多