Spring环境验证

时间:2014-03-19 21:28:02

标签: spring validation configuration environment

我们正在构建一个基于Spring的应用程序,该应用程序将作为分发包提供给最终用户。用户负责正确配置需要配置的任何内容(主要是关于各种文件系统位置,文件夹访问权限等)。最好让应用程序帮助用户了解未配置的内容或配置的哪些部分无效。

我们当前的方法是自定义ApplicationContextInitializer,它“手动”执行所有环境验证,然后在应用程序上下文中明确注册几个“低级”bean。如果出现问题,初始化程序抛出,异常会在main()中的某处被捕获,解释(转换为普通英语)然后显示。

虽然这种方法很好,但我想知道是否有任何最佳实践可以最大限度地减少手写代码并尽可能使用Spring。

这是一个说明性的例子。该应用程序需要一个文件夹上传文件。这意味着:

  1. 应该有配置文件
  2. 应该可以通过应用
  3. 访问此文件
  4. 此文件应该没有语法错误
  5. 此文件应明确定义某些特定属性(让它为app.uploads.folder
  6. 此属性应描述现有的文件系统实体
  7. 此实体应为文件夹
  8. 该应用应具有对此文件夹的读/写权限
  9. Spring是否提供了轻松实现此类验证的工具?

1 个答案:

答案 0 :(得分:1)

Spring Boot有一个很好的上下文和外部配置验证功能。如果您定义POJO类并将其声明为@ConfigurationProperties,那么Spring将使用EnvironmentDataBinder(外部属性和System / OS通常)绑定到其属性。 E.g。

@ConfigurationProperties(name="app.uploads")
public class FileUploadProperties {
    private File folder;
    // getters and setters ommitted
}

将绑定到app.uploads.folder并确保它是File。要进行额外验证,您可以在setter中手动执行,也可以在Validator中实现FileUploadProperties,也可以在字段上使用JSR-303注释。默认情况下,app.uploads.*中不绑定的外部属性将引发异常(例如,拼写错误的属性名称或转换/格式错误)。

如果您使用Spring Boot Autoconfigure @EnableAutoConfigure,则无需执行任何其他操作,但如果只是香草弹簧(启动),则需要说@EnableConfigurationProperties@Configuration的某个地方。

奖励功能:如果您还使用Spring Boot Actuator,您还将获得JMX和HTTP支持(在webapp中)以检查@ConfigurationProperties bean的可绑定和绑定属性。 HTTP端点是" / configprops"。