Java - 使用环境变量控制应用程序流

时间:2015-03-07 12:23:39

标签: java

这是关于环境变量及其在Java中的使用的一般最佳实践问题。

假设我有一个Web应用程序(1),它使用Web服务来定位另一个应用程序(2)。我希望在pre-prod环境中将此链接保持为应用程序流中的可选项:如果应用程序2已关闭,我想要定位一个模拟服务器,它总是返回一个答案。 我该如何做到最好?

我在想我可以使用像app1.usemockserver = false这样的环境变量。当我知道app 2关闭时,我可以设置app1.usemockserver = true,并且在我的代码中使用IF我可以定位模拟服务器,而不是应用程序2.

以这种方式做错了吗?我可以使用哪些替代方案?

2 个答案:

答案 0 :(得分:2)

使用环境变量会很困难,因为JVM会获取启动JVM时定义的所有环境变量。之后在那里进行的任何事情都不会被捡起来。

我建议您查看JMX并公开一个bean,它将设置boolean标志,以便在现有JVM中动态地从一个环境切换到另一个环境。

您甚至可以向JVM公开RPC调用以设置/重置布尔标志,但我更喜欢JMX。

另一种方法是在服务之上运行一个负载均衡器服务,它将执行听力测试,一旦它没有从相应的服务器听到,它就会切换到另一个服务器。

答案 1 :(得分:1)

根据SMA的回答,我认为最好的选择实际上是使用JMX。 但是,为了获得完全自动化的东西,这可以追溯到一个模拟的Web服务,JMX可以与修改后的断路器一起使用,就像在这个框架中一样:

Spring in Practice - kite

因此,当断路器打开时,它可能只针对模拟的Web服务。