【发布时间】:2015-02-04 06:28:47
【问题描述】:
我已经为 DB 中的枚举创建了表,并对主表应用了参照完整性。但我需要在 Spring Boot 中启动应用程序时根据 DB 值验证枚举值。
【问题讨论】:
标签: java database enums spring-boot
我已经为 DB 中的枚举创建了表,并对主表应用了参照完整性。但我需要在 Spring Boot 中启动应用程序时根据 DB 值验证枚举值。
【问题讨论】:
标签: java database enums spring-boot
Spring 提供了一个Lifecycle 接口,你可以实现它,容器一旦启动就会通知你。然后,您可以查询您的数据库以执行您需要的任何检查。来自文档:
任何 Spring 管理的对象都可以实现该接口。然后,当 ApplicationContext 本身启动和停止时,它会将这些调用级联到该上下文中定义的所有生命周期实现。它通过委托给 LifecycleProcessor 来做到这一点:
【讨论】:
特别是对于 Spring Boot,我发现最简单的解决方案是 SpringApplicationRunListener
如果 @ComponentScan 没有自动添加该类,则您必须实现您的 Listener 并将其注册到 spring.factories 文件中。
org.springframework.boot.SpringApplicationRunListener=xxx.MyListener
它为 Spring Boot 生命周期定义了非常清晰的钩子。注意:虽然只是一个接口,但实现类必须提供特殊的构造函数:
public MyListener(SpringApplication application, String[] args) {}
【讨论】: