在 Hibernate 之前运行 SpringLiquibase

2023-11-25

我正在使用 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·德努姆我能够通过使用解决这个问题

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Hibernate 之前运行 SpringLiquibase 的相关文章

随机推荐

  • 在管道操作符时如何返回可观察的“forkJoin”

    在我拥有这个运行良好的解析器之前 resolve return forkJoin this getData1 this getData2 this getData3 现在我必须做一些实际上行不通的事情 resolve return this
  • 在构建器模式中管理订单的首选方法是什么?

    我创建了一个流畅的构建器样式模式来帮助加载测试数据 某些方法的顺序很重要 并且想知道管理正确顺序的首选方法是什么 我目前有以下情况 using NUnit Framework TestFixture public class DataBui
  • Swing动画运行速度极慢

    我当前使用 Java Swing 运行的动画存在问题 这是一个离散事件模拟 基于文本的模拟工作正常 我只是在将模拟连接到 GUI 输出时遇到问题 对于此示例 我将模拟 10 辆汽车 这些汽车代表的是JPanels我稍后将详细阐述这一点 因此
  • 如何在 Java Swing 中制作带有复选框的列表?

    在 Java Swing 中拥有每个项目都带有复选框的列表的最佳方式是什么 IE 一个 JList 其中每个项目都有一些文本和一个复选框 一个精彩的答案是这样的CheckBoxList 它实现了 Telcontar 的答案 尽管是 3 年前
  • Selenium:使用 Python 获取元素的坐标或尺寸

    我看到有一些方法可以通过 Selenium 的各种 Java 库获取元素的屏幕位置和尺寸 例如org openqa selenium Dimension 其中提供 getSize and org openqa selenium Point
  • LINQ - 序列不包含元素

    我正在使用 LINQ 查询 如下所示 object collection where t gt t id Equals 2 First 我收到错误 序列不包含元素 为什么结果不包含元素时会抛出错误 当没有找到结果时 它不应该返回 null
  • 在 Android 上以编程方式设置 VPN

    我找到了以下代码以编程方式建立新的 VPN 但我不知道如何使用它来创建我的应用程序 VpnService service context getSystemService VPN SERVICE VpnProfile profile Vpn
  • Visual Studio:如何使用 WPF 编写编辑器扩展

    我正在尝试为 Visual Studio 编写一个编辑器扩展 我已经下载了 VS SDK 并创建了一个新的 Visual Studio Package 项目 但为我创建的虚拟控件是 Windows 窗体控件 而不是 WPF 控件 我正在尝试
  • 如何从 PostgreSQL 存储过程获取结果集?

    我在 PostgreSQL 11 中创建了一个存储过程来执行 CRUD 操作 它对于 1 创建 2 更新 3 删除运行良好 但是当我通过传递来运行读取命令时Condition 4要选择结果集 我收到以下错误 我已经使用 PostgreSQL
  • 在 QGraphicsScene 中显示图像

    我有一个简短的脚本 可以使用 PIL 多次修改图像 我希望能够在完成时显示中间步骤 因此我添加了一个 QGraphics 场景 并尝试在那里显示阶段 它将正确调整最后阶段的大小和居中 退出功能之前发布的最后一个阶段 但它会显示中间步骤 但不
  • php starup sqlsrv无法初始化模块

    我正在尝试将 MSSQL 连接到 PHP 我正在关注this教程 无论如何 在我按照该教程中所述添加 dll 文件后 我收到以下警告 我该如何解决这个问题 php starup sqlsrv unable to initialize mod
  • 证明SQL注入

    我试图在这里简单地证明这个简单的函数不足以阻止世界上的每一个 sql 注入 Function CleanForSQL ByVal input As String As String Return input Replace End Func
  • 具有多个应用程序的 ASP.NET Identity

    因此 我们的组织正在使用 ASP NET MVC 和 Web API 开发一些新的 Web 应用程序 我们决定不使用 Active Directory 进行身份验证 授权 因此看起来带有实体框架的 ASP NET 身份可能会起作用 查看数据
  • 使用 AutoResetEvent 同步两个线程

    我正在尝试实施AutoResetEvent 为此 我使用一个非常简单的类 public class MyThreadTest static readonly AutoResetEvent thread1Step new AutoResetE
  • 如何将视图添加到 LinearLayout,但从下向上?

    可以添加视图LinearLayout一个接一个向上的方向 您可以通过以下方式以编程方式添加它 LinearLayout layout LinearLayout findViewById R id layout layout addView
  • 在 Qt 安装程序框架 (QtIFW) 安装程序中安装 VC++ Redistributables?

    我正在使用 Qt Installer Framework v2 0 1 为我的应用程序构建安装程序 我正在 Windows 上为 x86 和 x64 构建应用程序 因此我正在为每个体系结构构建一个安装程序 每个体系结构中打包有不同的 VC
  • any() 是否被延迟评估?

    我正在编写一个脚本 其中我必须根据多种条件测试数字 如果any满足我想要返回的条件True我想以最快的方式做到这一点 我的第一个想法是使用any 而不是嵌套if语句或多个or链接我的条件 因为如果有任何一个条件满足的话我会很满意True我真
  • 如何防止默认复选框事件覆盖我的 jQuery 检查/取消选中功能?

    我在表格内有一个复选框列表 其中包含一个简单的 jQuery 函数 该函数允许用户单击表格行中的任意位置来选中 取消选中复选框 它工作得很好 除非用户实际单击该复选框 那就不行了 有任何想法吗 这是我的代码 HTML tr tr jQuer
  • Google Codejam 亚太地区测试练习轮:括号顺序

    我花了一天时间解决这个问题并且找不到传递大型数据集的解决方案 Problem n 个括号序列由 n 个 和 n 个 组成 现在 我们有了所有有效的 n 个括号序列 找到第 k 个最小的序列词典编纂的 order 例如 以下是按字典顺序排列的
  • 在 Hibernate 之前运行 SpringLiquibase

    我正在使用 SpringLiquibase 在应用程序启动期间自动应用 liquibase 更新 一般来说 这工作正常 但是当我将 hibernate hbm2ddl auto 设置为 验证 时 hibernate 开始抱怨数据库方案 然后