【问题标题】:Best practices for validating the configuration of a Spring web application验证 Spring Web 应用程序配置的最佳实践
【发布时间】:2012-02-08 14:33:57
【问题描述】:

我希望我的基于 Spring 的 Web 应用程序能够在启动期间验证其配置。

这意味着例如:

  • 检查必需的文件夹是否存在且可读/可写
  • 检查所需的配置键是否已设置且一致
  • ...
  • 检查正常运行所需的任何其他约束

如果出现问题,您如何执行这些检查并通知系统管理员?

目标是降低在应用程序实际需要绑定到错误配置的资源时出现某些严重错误的风险。

注意:我的方法是使用特殊的 EnvironmentValidation bean 来检查配置/文件夹结构是否正常,如果不正常则抛出异常

【问题讨论】:

    标签: java spring validation web-applications configuration


    【解决方案1】:

    在启动过程中,所有错误都会记录到服务器日志中。可以查看日志并通知系统管理员。

    【讨论】:

      【解决方案2】:

      如果您想要通知,您可以设置一个电子邮件通知程序,例如使用 log4j,它将在启动时向系统管理员发送任何异常。

      如果配置键不存在,spring 无论如何都不会启动。

      检查密钥是否一致?

      检查文件夹是否存在并且可读/可写并不是我在我的 web 应用程序中真正要做的事情——这属于你的部署基础设施。假设您可以将自己的自定义检查编写为 spring bean,首先加载这些检查,如果您的某些配置验证失败,则抛出异常。

      【讨论】:

      • 与“键是一致的”我的意思是确保它们包含有效的配置(简单的例子,检查某个整数是否在给定的边界内)。
      • 您的对象本身应该进行这种类型的边界检查。例如,如果您在 spring bean 的构造函数中抛出 IllegalArgumentException,这将在启动期间验证。
      • 好的,但是我的观点略有不同。我想在启动时进行“健全性检查”,因为 IllegalArgumentException 可能会在应用程序生命周期的后期出现。假设应用程序通过与一些用户交互来产生一些数据。在某些时候,应用程序需要将此数据从内存(会话)移动到磁盘(例如作为二进制文件)并访问“错误”参数。此时,应用程序将无法恢复,数据或部分业务流程将面临风险。
      • spring 将在容器启动时实例化您的每个 bean - 如果您在构造函数中进行检查,您将立即获得 IllegalArgumentException。
      • 好的,这确实是我试图追踪的 最佳实践之一... :) 实际上在构造函数或“setConfiguration( Properties properties)" 方法应该足够了。谢谢,这是一件很明显的事情,但由于某种原因,它并没有作为一个好的解决方案出现在我的脑海中:P
      猜你喜欢
      • 2023-04-06
      • 2015-02-24
      • 2014-04-11
      • 2011-11-28
      • 2011-02-18
      • 2013-02-15
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多