Currently, I\'m using the default @SpringBootApplication
annotation with the following properties in application.properties
:
spring
This is yml specific configuration for making spring boot generate ddl creation script in root folder:
spring:
jpa:
properties:
javax:
persistence:
schema-generation:
create-source: metadata
scripts:
action: create
create-target: create.sql
Updating your jpa properties
will generate the scripts for you.
<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>
This will generate the scripts in the given location. There are other properties as well which can be used on various use-cases, please refer here
The whole configuration will look like this
<?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>
Ah, right after I posted this question a section of the spring data docs caught my eye:
73.5 Configure JPA properties In addition all properties in spring.jpa.properties.* are passed through as normal JPA properties (with the prefix stripped) when the local EntityManagerFactory is created.
So, to answer my own question: prefix the javax.persistence properties with 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
After doing this, the schema file was generated automatically in the project root.