gpt4 book ai didi

java - 在 Hibernate 之前运行 SpringLiquibase

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:33 24 4
gpt4 key购买 nike

我正在使用 SpringLiquibase 在应用程序启动期间自动应用我的 liquibase 更新。一般来说,这工作正常,但是当我将 hibernate.hbm2ddl.auto 设置为“验证”时,hibernate 在 liquibase 似乎有机会应用更新之前开始提示数据库方案。我的配置如下所示:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.myapp")
@PropertySource(value = {"classpath:myapp.properties"})
@EnableJpaRepositories("com.myapp")
public class MyappConfig {

@Resource
private Environment env;

@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();

dataSource.setDriverClassName(env.getRequiredProperty("jdbc.driver"));
dataSource.setUrl(env.getRequiredProperty("jdbc.url"));
dataSource.setUsername(env.getRequiredProperty("jdbc.username"));
dataSource.setPassword(env.getRequiredProperty("jdbc.password"));

return dataSource;
}

@Bean
public SpringLiquibase liquibase() {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource());
liquibase.setChangeLog("classpath:liquibase/liquibase-master-changelog.xml");
return liquibase;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
entityManagerFactoryBean.setPackagesToScan("com.myapp");

entityManagerFactoryBean.setJpaProperties(hibernateProperties());

return entityManagerFactoryBean;
}

private Properties hibernateProperties() {
Properties properties = new Properties();

String[] propertyNames = new String[]{"hibernate.dialect", "hibernate.show_sql", "hibernate.hbm2ddl.auto"};

for (String propertyName : propertyNames) {
properties.put(propertyName, env.getRequiredProperty(propertyName));
}
return properties;
}

@Bean
public JpaTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return transactionManager;
}

}

有什么方法可以让 liquibase 在 hibernate 尝试验证模式之前应用它的更新?

最佳答案

感谢M. Deinum我能够通过使用解决这个问题

@Bean
@DependsOn("liquibase")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
[...]
}

@DependsOn 确保 liquibase 在 Hibernates 模式验证之前运行。

关于java - 在 Hibernate 之前运行 SpringLiquibase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27677656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com