1

我正在为我的应用程序实施健康检查。我已经为我们的应用程序中的不同逻辑系统配置了类,并编写了检查整个环境的条件的方法,如数据库计数、日志记录错误、cpu 进程等。

现在我有一个要求,我必须根据主机检查某些条件,即类中的某些方法。

通过属性文件访问这些方法的最佳方法是什么?请提出您的建议。

谢谢。

4

2 回答 2

0

我不喜欢在这种事情上使用反射。更改属性文件太容易了,然后系统开始生成时髦的错误消息。

我更喜欢直截了当的东西,例如:

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 脚本添加新测试。

如果它在您认为应该运行的时候没有运行特定的测试,那么只需检查两件事:

  • 它在属性文件中吗?
  • 代码的版本是否正确?
于 2013-08-16T22:09:41.570 回答
0

您可以为所需的每项检查定义不同的 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()

于 2013-08-17T00:30:30.533 回答