如何用现代的Spring Boot + Data JPA和Hibernate设置生成ddl创建脚本?


18

目前,我使用的是默认@SpringBootApplication注释具有以下属性在application.properties

spring.datasource.url=jdbc:mysql://localhost/dbname 
spring.datasource.username=X 
spring.datasource.password=X 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.jpa.hibernate.naming_strategy=my.package.CustomNamingStrategy 

由于JPA 2.1,我应该能够使用javax.persistence.schema-generation.*性质,但在我的application.properties设置它们似乎没有效果。

我看过一些示例like this,它们连接了一大堆额外的bean,但它们没有使用Mysql。无论如何,这样做需要我配置许多春天正在为我照顾的选项。

我的目标是:

  • 生成的MYSQL方言
  • 一个模式创建SQL脚本,而不需要
  • 输出build目录
  • 也产生休眠脚本数据库连接envers表将是一个巨大的优势。

我不想:

  • 活动数据库上创建/删除模式

库版本:

hibernate   : 4.3.11.FINAL 
    spring framework : 4.2.5.RELEASE 
    spring-boot  : 1.3.3.RELEASE 
    spring-data-jpa : 1.10.1.RELEASE // for querydsl 4 support 
    spring-data-commons: 1.12.1.RELEASE // for querydsl 4 support 

(使用gradle这个,不是Maven的)

40

啊,我发布这个questi后在 spring.jpa.properties

73.5 Configure JPA properties此外,所有属性*通过正常的JPA性能 通过(剥去前缀)当本地的EntityManagerFactory:在春天的数据文档的部分引起了我的眼睛。创建了 。

因此,要回答自己的问题:前缀位于javax.persistence性能与spring.jpa.properties:

spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata 
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create 
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql 

这样做了以后,在项目的根目录自动生成模式文件。

  0

是它足以这些属性来你的Spring的配置添加到得到你以后的结果,还是你还必须编写一些Java代码来调用像Persistence.generateSchema(...)?如果你能分享,希望看到更多你的解决方案。 07 7月. 162016-07-07 19:48:59

  0

表示回答,基本上在添加该配置后,该文件是在生成的源目录中自动创建的。 03 10月. 162016-10-03 09:34:26

  0

我看到该文件是在运行时生成的。有没有办法生成它'离线'? 05 4月. 172017-04-05 14:46:21

  0

有没有办法添加;在每个ddl命令之后?有没有可能在没有创建drop/create ddl的情况下运行?有没有可能运行整个应用程序? 09 11月. 172017-11-09 18:42:37

  0

@MichailMichailidis为了在不运行整个应用程序的情况下运行它,我会推荐使用checkout flyway来管理你的模式:https://flywaydb.org/ 15 11月. 172017-11-15 06:35:43


-1

对于需要设置在application.properties文件中的下列弹簧启动应用程序,以获取create.sql文件

spring.jpa.generate-ddl=true 
spring.jpa.properties.javax.persistence.schema-generation.create-source=metadata 
spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create 
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql 
  0

它仍然可以运行,不需要spring.jpa.generate-ddl 08 11月. 172017-11-08 18:32:01