Java 在生产中设置与在开发中具有不同值的标志的一般做法是什么
假设我有一个标志Java 在生产中设置与在开发中具有不同值的标志的一般做法是什么,java,flags,Java,Flags,假设我有一个标志公共静态最终布尔标志。 在开发中,我希望它是true,但在生产中,我希望它是false 我是否应该在开发时直接将其设置为true,当我们构建/发布时,有人会将其更改为false 我有一种感觉,这不是一个好办法,因为它看起来很可怕 我应该采取什么方法?您可以将文件放置在仅在开发期间存在的位置。 在运行时,该标志被初始化为 flag = file.exists(); 据我所见,文件用于在运行时处理特定于环境和应用程序的属性 例如,假设您有两个属性文件—一个用于开发,一个用于生产。下
公共静态最终布尔标志。
在开发中,我希望它是true
,但在生产中,我希望它是false
我是否应该在开发时直接将其设置为true
,当我们构建/发布时,有人会将其更改为false
我有一种感觉,这不是一个好办法,因为它看起来很可怕
我应该采取什么方法?您可以将文件放置在仅在开发期间存在的位置。
在运行时,该标志被初始化为
flag = file.exists();
据我所见,文件用于在运行时处理特定于环境和应用程序的属性
例如,假设您有两个属性文件—一个用于开发,一个用于生产。下面是它们的样子:
开发人员属性:
application.flag=true
application.flag=false
生产性质:
application.flag=true
application.flag=false
它们都是相同的文件名,因此您不必担心读取“不同”的文件
然后加载该文件,并读取该特定属性:
Properties properties = new Properties();
InputStream inputStream = null;
try {
inputStream = new FileInputStream("/path/to/application/app.properties");
properties.load(inputStream);
System.out.println(properties.getProperty("application.flag"));
} catch (IOException e) {
e.printStackTrace();
}
如果在该文件中设置了产品的值,则会得到false
。如果你有开发的价值,你会得到true
如果不是一个属性文件,那么对于系统属性来说,听起来是个不错的地方。
-Dflag=true
其中-D是用于启动JVM的行的一部分。在Tomcat its上,在bin/下setenv.sh中的JAVA_OPTS环境变量中,如果它是“非危险”属性,则外部化到属性文件中-它们易于管理和部署:
myFlag=true
如果是更重要的属性,请在命令行上设置该属性。这使得设置标志成为一个有意识的操作决策,这意味着将文件从开发人员意外复制到生产环境不会造成损坏:
java -DmyFlag=true ...
如果非常重要,请使用环境变量,该变量可以通过System.getEnv()
访问,并且不能被代码覆盖
export myFlag=true
java ...
如果prod和dev中运行的代码完全相同,那么a可能是更容易实现的选择。在dev中运行时,只需在使用-D
开关调用JVM时标记属性
我们使用一个众所周知的外部配置文件(Java属性文件),该文件位于类路径上,包含特定的开发条目。
文件的URL
可以使用上的getResource(“wellKnownName”)
轻松恢复
如果您正在为prod和dev构建不同的版本,那么主jar清单中的条目或捆绑属性文件可能是更好的选择
下面是一个详细描述如何使用Maven执行此操作的示例。嗯。。。好啊听起来有点笨拙,但我想它会起作用,虽然我希望它的价值会在编译时知道。BTW,你不认为发展和生产是互斥的吗?一旦进入生产阶段,就没有回头路了?在这种情况下,更改标志并重新编译并不是最糟糕的选择。我担心的是,一些人将不得不手动更改标志。(说真的,谁还在手工编译和发布他们的软件?!)可能的重复