我正在为我的应用程序实施健康检查。我已经为我们的应用程序中的不同逻辑系统配置了类,并编写了检查整个环境的条件的方法,如数据库计数、日志记录错误、cpu 进程等。
现在我有一个要求,我必须根据主机检查某些条件,即类中的某些方法。
通过属性文件访问这些方法的最佳方法是什么?请提出您的建议。
谢谢。
我正在为我的应用程序实施健康检查。我已经为我们的应用程序中的不同逻辑系统配置了类,并编写了检查整个环境的条件的方法,如数据库计数、日志记录错误、cpu 进程等。
现在我有一个要求,我必须根据主机检查某些条件,即类中的某些方法。
通过属性文件访问这些方法的最佳方法是什么?请提出您的建议。
谢谢。
我不喜欢在这种事情上使用反射。更改属性文件太容易了,然后系统开始生成时髦的错误消息。
我更喜欢直截了当的东西,例如:
controlCheck.properties:
dbCount=true
logger=false
cpuProcess=true
然后代码有点像这样(不是真正的代码):
Properties props = ... read property file
boolean isDbCount = getBoolean(props, "dbCount"); // returns false if prop not found
... repeat for all others ...
CheckUtilities.message("Version " + version); // Be sure status show version of this code.
if (isDbCount) {
CheckUtilities.checkDbCount(); // logs all statuses
}
if (... other properties one by one ...) {
... run the corresponding check ...
}
有很多方法可以做到这一点,但这很简单,而且几乎万无一失。所有配置都在一个属性文件中进行,所有代码都在一个位置,Java 程序员可以轻松注释掉不相关的测试或添加新测试。如果您添加一个新测试,它不会自动在任何地方运行,因此您可以按照自己的计划推出它,如果您愿意,可以使用简单的 shell 脚本添加新测试。
如果它在您认为应该运行的时候没有运行特定的测试,那么只需检查两件事:
您可以为所需的每项检查定义不同的 bean:
<bean id="dbcountBean" class="DBCountHealtCheck" scope="prototype">
<!-- bean properties -->
</bean>
然后是注入操作 bean 的用于 HealtCheck 的 bean:
<bean id="healtChecker" class="HealtChecker" scope="prototype">
<property name="activeChecker"><bean class="PropertiesFactoryBean>
<property name="location">file:path/to/file</property></bean>
</property>
<property name="dbCountCheck" ref="dbCountBean" />
<!-- other properties -->
</bean>
class HealtChecker {
private DBCountHealtCheck dbCountChecker;
private Properties activeChecker;
public void setDbcount(DBCountHealtCheck dbCountChecker) {
this.dbCountChecker = dbCountChecker;
}
public void setActiveChecker(Properties activeChecker) {
this.activeChecker = activeChecker;
}
public void check() {
if("true".equals(this.activeChecker.get("dbCount")) {
this.dbCountChecker.check();
}
}
如果使用此解决方案您无法重新加载文件,请在HealthChecker
删除activeChecker
一个属性时public void setPropertiesLocation(URL propertiesLocation);
让HealthChecker
实现InitializingBean
并加载属性afterPropertiesSet()