我想使bean依赖于另一个bean,但是不需要再次重新定义它,因为我已经从Spring Boot自动配置中获得了它。
我正在现有的Spring Boot项目中设置一个Liquibase。该项目还配置了Hibernate,并且使用以下配置:
...
spring.jpa.hibernate.ddl-auto=validate
...
不幸的是,Hibernate验证是在Liquibase迁移之前执行的,这会使应用程序崩溃,因为Hibernate无法检测到将由Liquibase创建的表。另外,我不想关闭此验证。
从多个SO解答和博客文章中,我知道我需要做的就是推迟entityManagerFactory
bean的创建,并使其依赖于使用@DependsOn
的Liquibase bean的创建。注释,但是问题是,我不想重复Spring Boot自动配置已经在做的工作。
这是建议的方法,但令我不满意:
@Bean
public SpringLiquibase liquibase(DataSource dataSource) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setChangeLog("classpath:liquibase-changelog.xml");
liquibase.setDataSource(dataSource);
return liquibase;
}
@Bean
@DependsOn("liquibase")
// I get this LocalContainerEntityManagerFactoryBean configured from Spring Boot Autoconfiguration,
// so I see no point of configuring it once again
public LocalContainerEntityManagerFactoryBean entityManagerFactory(Properties hibernateProperties,
DataSource dataSource) {
LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
bean.setDataSource(dataSource);
bean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
bean.setPackagesToScan("com.package");
bean.setJpaProperties(hibernateProperties);
return bean;
}
这是否可以避免覆盖entityManagerFactory
bean并使其依赖于Liquibase bean的创建?