Pregunta Múltiples archivos de importación SQL en Spring Boot


Pasando por el Manual de referencia de Spring Boot, hay un par de formas en que podemos importar datos al inicio de una aplicación. Combinado con una base de datos en memoria, esto es bastante útil para las pruebas.

Las opciones son crear un archivo llamado import.sql, que será recogido por Hibernate, o para crear un archivo llamado data.sql, que será recogido por Spring JDBC. Ambos funcionan bien para mí.

Sin embargo, me gusta dividir mis proyectos un poco, por lo que actualmente tengo un modelo de dominio central, donde hay algunas importaciones útiles para configurar los datos básicos, como algunos usuarios, que se utilizan en todas partes. También tengo proyectos específicos de funciones en los que es útil reutilizar esa misma importación de datos base, pero también importar algunos datos adicionales que son específicos de esa función.

Aquí es donde las cosas no funcionan tan bien.

encontré una respuesta a una pregunta anterior, donde Pascal Thivent mencionó que hibernate.hbm2ddl.import_files propiedad podría usarse para definir una lista de archivos, a partir de Hibernate 3.6.0.Beta1. Dado que mi proyecto está importando 4.3.1.Final, pensé que quizás esto estaría disponible.

Así que intenté agregar lo siguiente a mi Spring Boot application.properties:

spring.jpa.hibernate.hbm2ddl.import_files=/another-import.sql

y:

hibernate.hbm2ddl.import_files=/another-import.sql

Desafortunadamente, ninguno de estos haría que la importación se ejecutara.

Así que me pregunto si acabo de hacer un lío de las propiedades anteriores (bastante probable). ¿O hay algo más que deba hacer?

Tenga en cuenta que, como solución, vi que Spring JDBC parece ejecutarse data.sql después de ejecutar Hibernate import.sql. Entonces, siempre que no necesite más de dos importaciones, puedo usar import.sql para los datos base y luego colocar las importaciones específicas del proyecto en data.sql. Puedo salir adelante con esto, pero en realidad no es una solución.


32
2017-07-01 10:40


origen


Respuestas:


Si realmente desea usar la propiedad de hibernación, prefíquela con spring.jpa.properties. como esos se agregan como son como propiedades a la EntityManagerFactory. Ver aquí en la guía de referencia Spring Boot.

spring.jpa.properties.hibernate.hbm2ddl.import_files=file1.sql,file2.sql

Sin embargo, también puedes usar spring.datasource.data y spring.datasource.schema propiedades a su ventaja. Por defecto, respectivamente data y schema. Como puedes ver en el DataSourceInitializer clase. También puede configurarlos y toman una lista de recursos separados por comas.

spring.datasource.data=classpath:/data-domain.sql,file:/c:/sql/data-reference.sql,data-complex.sql

Se pone aún mejor porque la carga de recursos también permite cargar recursos con patrones de estilo de hormiga.

spring.datasource.data=/META-INF/sql/init-*.sql
spring.datasource.schema=/META-INF/sql/schema-*.sql 

35
2017-07-01 12:12