Actuellement, j'utilise la valeur par défaut @SpringBootApplication
annotation avec les propriétés suivantes dans 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
Depuis JPA 2.1, je devrais pouvoir utiliser le javax.persistence.schema-generation.*
propriétés, mais les définir dans mon application.properties semble n'avoir aucun effet.
J'ai vu des exemples comme celui-ci qui connecte toute une série de haricots supplémentaires, mais ils n'utilisent pas Mysql. Et dans tous les cas, le faire comme ça me demande de configurer de nombreuses options dont Spring s'occupe pour moi maintenant.
Mes objectifs sont de:
Je ne veux pas:
Versions lib:
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
(Utiliser gradle, pas maven)
Ah, juste après avoir posté cette question, une section des documents de données du printemps a attiré mon attention:
73.5 Configuration des propriétés JPA De plus, toutes les propriétés de spring.jpa.properties. * Sont transmises en tant que propriétés JPA normales (avec le préfixe supprimé) lors de la création de l'entité locale EntityManagerFactory.
Donc, pour répondre à ma propre question: préfixez les propriétés javax.persistence avec 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
Après cela, le fichier de schéma a été généré automatiquement à la racine du projet.
Ceci est une configuration spécifique à yml pour que spring boot génère le script de création ddl dans le dossier racine:
spring:
jpa:
properties:
javax:
persistence:
schema-generation:
create-source: metadata
scripts:
action: create
create-target: create.sql
Mise à jour de votre jpa properties
générera les scripts pour vous.
<prop key="javax.persistence.schema-generation.scripts.action">drop-and-create</prop>
<prop key="javax.persistence.schema-generation.scripts.create-target">./create_mssql.sql</prop>
<prop key="javax.persistence.schema-generation.scripts.drop-target">./drop_mssql.sql</prop>
Cela générera les scripts à l'emplacement donné. Il existe également d'autres propriétés pouvant être utilisées dans différents cas d'utilisation, veuillez vous reporter à ici
La configuration entière ressemblera à ceci
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="my-persistence-unit" transaction-type="JTA">
<description>Forge Persistence Unit</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>Java:jboss/datasources/ExampleDS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.sql-load-script-source" value="META-INF/data.sql"/>
</properties>
</persistence-unit>
</persistence>