Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Hibernate MySQL初始化_Java_Mysql_Spring_Hibernate_Spring Mvc - Fatal编程技术网

Java Spring Hibernate MySQL初始化

Java Spring Hibernate MySQL初始化,java,mysql,spring,hibernate,spring-mvc,Java,Mysql,Spring,Hibernate,Spring Mvc,我试图弄清楚SpringHibernate和MySQL的关系。我的目的是,当我启动程序时,它在类路径中执行import.sql文件。我希望在不破坏现有表的情况下执行此操作。我找到了一些关于启动时执行sql文件的文档 官方的春季医生说 此外,类路径根目录中名为import.sql的文件将在启动时执行 但是,Spring会销毁我的表,然后执行import.sql文件。有没有一种方法可以在不丢失现有数据的情况下执行.sql文件 在下面的问题中,他几乎想要和我一样的东西 但是 仅当hbm2ddl.a

我试图弄清楚SpringHibernate和MySQL的关系。我的目的是,当我启动程序时,它在类路径中执行
import.sql
文件。我希望在不破坏现有表的情况下执行此操作。我找到了一些关于启动时执行sql文件的文档

官方的春季医生说

此外,类路径根目录中名为import.sql的文件将在启动时执行

但是,Spring会销毁我的表,然后执行import.sql文件。有没有一种方法可以在不丢失现有数据的情况下执行.sql文件

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

但是

仅当hbm2ddl.auto设置为create或create drop时,此选项才起作用


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

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

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

答案是

数据源初始化器

它就像一个符咒

下面是在启动时运行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;
}

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

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

答案是

数据源初始化器

它就像一个符咒

下面是在启动时运行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;
}

再多读一点。。。不要使用Hibernate或JPA来初始化数据库,只需使用JDBC即可。改为添加一个
data.sql
。您可以将数据的填充放在应用程序范围内的非惰性初始化bean中(并从那里运行本机sql查询)…好的,在配置Hibernate时,您可以要求它以属性
create drop
在每个开头重新创建数据库架构。请确保将其设置为至多
validate
@M.Deinum,我阅读了该部分,并进行了更改,但它没有执行data.sql文件。这是我所做的改变
application.properties
spring.datasource.initialize=true-spring.datasource.data=classpath:data.sql hibernate.hbm2ddl.auto=和src/main/resources文件夹中的my
data.sql
文件,如
application.properties
文件。您无需更改任何内容,只添加一个
数据。sql
其他一切都可以保持原样。默认情况下将执行该文件。另外,请不要添加代码,因为注释可以改善您的问题。请进一步阅读。。。不要使用Hibernate或JPA来初始化数据库,只需使用JDBC即可。改为添加一个
data.sql
。您可以将数据的填充放在应用程序范围内的非惰性初始化bean中(并从那里运行本机sql查询)…好的,在配置Hibernate时,您可以要求它以属性
create drop
在每个开头重新创建数据库架构。请确保将其设置为至多
validate
@M.Deinum,我阅读了该部分,并进行了更改,但它没有执行data.sql文件。这是我所做的改变
application.properties
spring.datasource.initialize=true-spring.datasource.data=classpath:data.sql hibernate.hbm2ddl.auto=和src/main/resources文件夹中的my
data.sql
文件,如
application.properties
文件。您无需更改任何内容,只添加一个
数据。sql
其他一切都可以保持原样。默认情况下将执行该文件。另外,请不要添加代码,因为注释可以改善您的问题。