2017-05-31 33 views
1

我想從我的Java類生成數據庫結構如何DB模式生成之後,但在應用程序啓動

jpa.generate-ddl: true 
jpa.ddl-auto: true 

此外,我需要運行SQL腳本之前的應用程序將是因爲我有

執行sql腳本

@PostConstruct我使用這些數據的方法。

你能舉例說明如何在sprin引導中做到這一點?

+0

你使用Hibernate?嘗試使用spring.jpa.hibernate.ddl-auto =選項 在彈簧引導中使用的選項列表是 驗證:驗證架構,不更改數據庫。 更新:更新架構。 create:創建模式,破壞以前的數據。 create-drop:在會話結束時刪除架構 因此爲避免數據丟失,請使用update。 –

回答

0

具有所需功能的簡單彈簧啓動應用程序可以在此處找到。 https://github.com/salilotr89/Spring-boot-postgres-dbinit

Spring JDBC有一個DataSource初始值設定項功能。 Spring Boot默認啓用它,並從標準位置schema.sql data.sql(位於類路徑的根目錄)中加載SQL。

此外春天啓動將加載模式 - $ {}平臺的.sql數據 - $ {}平臺.SQL文件(如果存在),其中平臺是spring.datasource.platform的價值,例如您可以選擇將其設置爲數據庫的供應商名稱(hsqldb,h2,oracle,mysql,postgresql等)。

Spring Boot默認啓用Spring JDBC初始化程序的快速失敗功能,所以如果腳本導致異常,應用程序將無法啓動。腳本位置可以通過設置spring.datasource.schema和spring.datasource.data進行更改,如果spring.datasource.initialize = false,那麼這兩個位置都不會被處理。

要禁用失效快速,您可以設置spring.datasource.continue-on-error = true。這可以在應用程序成熟並部署幾次後很有用,因爲腳本可以充當'窮人的遷移' - 插入失敗意味着數據已經存在,因此不需要阻止應用程序運行,例如。

如果您想在JPA應用程序(使用Hibernate)中使用schema.sql初始化,那麼如果Hibernate嘗試創建相同的表,ddl-auto = create-drop將導致錯誤。爲了避免這些錯誤,將ddl-auto明確設置爲「」(首選)或「無」。無論您是否使用ddl-auto = create-drop,都可以使用data.sql來初始化新數據。

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

相關信息:Spring Boot - Loading Initial Data

+0

我試過了。 1.它不適用於我2.我應該這樣做,以防萬一如果某些配置文件激活 – gstackoverflow

+0

您是否使用maven?如果你願意,你可以使用flyway,這將有助於你的應用以很好的方式擴展。詳情請參閱https://egkatzioura.com/2015/05/14/database-migration-with-flyway/ –

+0

我使用gradle和flyway。 – gstackoverflow

0

所有你需要做的是一個發生在application.properties中文件所在的文件夾資源名爲data.sql文件。

該文件中的任何查詢都將在應用程序啓動之前和創建數據庫之後執行。

想了解更多請查看此鏈接 http://www.baeldung.com/spring-boot-data-sql-and-schema-sql

相關問題