我正在使用Spring,Spring Security,Tomcat和MySQL开发Java webapp。现在我仍然处于一个阶段,我正在对数据库进行相当频繁的更改,以及重新创建数据库以清除测试数据。最终,这不会是一个问题,但有没有办法让实例化的bean或执行的代码来引导webapp?我希望能够利用IoC功能来使用相同的功能,例如我的应用程序用来填充原始用户帐户的PasswordEncoder
。另外,我想让这个脚本创建数据库,如果它不存在,等等。有没有办法做到这一点?有没有比我建议更好的方法?我没有和我刚才描述的算法结婚,但这是我能想到的最好的方式来传达我正在寻找的东西。
提前致谢!
答案 0 :(得分:3)
创建数据库模式的好方法是liquibase。您也可以插入数据。 Liquibase通过bean提供Spring集成:liquibase.spring.SpringLiquibase
,因此如果需要,数据库将会更新。
答案 1 :(得分:3)
如果使用Spring,则可以register a ContextLoaderListener自动启动ApplicationContext。然后,您的ApplicationContext可以初始化数据库,最好是通过JPA或Hibernate,还可以using plain jdbc
答案 2 :(得分:1)
您可以使用ApplicationListener
接口实现bean。
在收到ContextRefreshedEvent
这种方法的优点是框架将为您加载上下文和所有bean,因此您可以访问它们以进行您想要进行的任何引导。
缺点是此事件在初始化和刷新时触发
<强> ContextRefreshedEvent 强> 在初始化或刷新ApplicationContext时发布。这里初始化意味着所有bean都被加载,单例被预先实例化,ApplicationContext已经可以使用了。