【问题标题】:Spring Hibernate MySQL initializationSpring Hibernate MySQL 初始化
【发布时间】:2015-12-26 14:05:18
【问题描述】:

我正在尝试找出 Spring Hibernate - MySQL 的关系。我的目的是,当我启动程序时,它会在类路径中执行import.sql 文件。我想在不破坏现有表的情况下做到这一点。我找到了一些关于在启动时执行 sql 文件的文档。

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

官方春季文档说;

另外,启动时会执行classpath根目录下的import.sql文件。

但是,Spring 破坏了我的表,然后执行 import.sql 文件。有没有办法在不丢失现有数据的情况下执行 .sql 文件?

在下面的问题中,他几乎想要和我一样的东西。

How to import initial data to database with Hibernate?

但是;

这也仅在 hbm2ddl.auto 设置为 create 或 create-drop 时才有效。

我搜索了很多,但找不到方法。长话短说,如何在启动时运行 .sql 语句而不破坏数据库?

【问题讨论】:

  • 进一步阅读... Section about JDBC 不要使用 Hibernate 或 JPA 来初始化数据库,只需使用 JDBC。改为添加data.sql
  • 您可以将数据群放在应用程序范围的非延迟初始化 bean 中(并从那里运行本机 sql 查询)..
  • AFAIK,在配置 Hibernate 时,您可以要求它在每次以属性 <property name="hbm2ddl.auto">create-drop</property> 开头时重新创建数据库模式。一定要设置为最多validate
  • @M.Deinum,我阅读了该部分并进行了更改,但它没有执行 data.sql 文件。这是我所做的更改; application.properties spring.datasource.initialize=true spring.datasource.data= classpath: data.sql hibernate.hbm2ddl.auto = 和我在 src/main/resources 文件夹中的 data.sql 文件,如 application.properties 文件。
  • 您不需要更改任何内容,只需添加data.sql 其他所有内容都可以保持原样。该文件将默认执行。另外请不要添加代码,因为 cmets 会用它来改进您的问题。

标签: java mysql spring hibernate spring-mvc


【解决方案1】:

我终于可以找到自己问题的答案了。我在我的项目中使用了基于 java 的配置。网上大部分与spring相关的例子都是基于xml的配置,我的问题很难找到答案。

幸运的是我看到了这个问题;

How to execute SQL insert queries to populate database during application start/load?

答案是

数据源初始化器

它就像一个魅力!

这是在不破坏现有数据库的情况下在启动时运行 SQL 语句的代码。

@Bean
    public DataSourceInitializer dataSourceInitializer() {
    ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
    resourceDatabasePopulator.addScript(new ClassPathResource("/data.sql"));

    DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
    dataSourceInitializer.setDataSource(dataSource());
    dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
    return dataSourceInitializer;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    相关资源
    最近更新 更多