我们正在构建一个基于Spring的应用程序,该应用程序将作为分发包提供给最终用户。用户负责正确配置需要配置的任何内容(主要是关于各种文件系统位置,文件夹访问权限等)。最好让应用程序帮助用户了解未配置的内容或配置的哪些部分无效。
我们当前的方法是自定义ApplicationContextInitializer
,它“手动”执行所有环境验证,然后在应用程序上下文中明确注册几个“低级”bean。如果出现问题,初始化程序抛出,异常会在main()
中的某处被捕获,解释(转换为普通英语)然后显示。
虽然这种方法很好,但我想知道是否有任何最佳实践可以最大限度地减少手写代码并尽可能使用Spring。
这是一个说明性的例子。该应用程序需要一个文件夹上传文件。这意味着:
app.uploads.folder
)Spring是否提供了轻松实现此类验证的工具?
答案 0 :(得分:1)
Spring Boot有一个很好的上下文和外部配置验证功能。如果您定义POJO类并将其声明为@ConfigurationProperties
,那么Spring将使用Environment
将DataBinder
(外部属性和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"。