2017-09-06 44 views
0

我想在我的Spring引導應用程序啓動後插入一些測試數據。我有以下配置。我注意到,在創建JPA實體之前執行sql腳本導致insert語句失敗。有沒有其他配置我在這裏失蹤?正如我的配置中指出的,我使用Spring Boot和H2和EclipseLink作爲JPA。Spring引導數據初始化

參考 https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

配置

# H2 
spring.h2.console.enabled=true 
# Datasource 
spring.datasource.url=jdbc:h2:mem:testdb;MODE=ORACLE 
spring.datasource.username=sa 
spring.datasource.password= 
spring.datasource.driver-class-name=org.h2.Driver 
# JPA 
spring.jpa.generate-ddl=true 
spring.jpa.show-sql=true 
spring.jpa.properties.eclipselink.weaving=false 

data.sql下/ SRC /主/資源放置

日誌

2017-09-05 20:37:37,989 [restartedMain ] INFO 
o.s.j.d.e.EmbeddedDatabaseFactory   - Starting embedded database: 
url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', 
username='sa' 
2017-09-05 20:37:38,141 [restartedMain ] INFO 
j.LocalContainerEntityManagerFactoryBean - Building JPA container 
EntityManagerFactory for persistence unit 'default' 
2017-09-05 20:37:38,446 [restartedMain ] INFO 
o.s.o.j.AbstractEntityManagerFactoryBean - Initialized JPA 
EntityManagerFactory for persistence unit 'default' 
2017-09-05 20:37:38,510 [restartedMain ] INFO o.s.j.d.i.ScriptUtils      
- Executing SQL script from URL [file:/develop/src/data-init/target/classes/data.sql] 
error... 

實體

@Entity 
@Table(name = "TEMPLATE_CONFIG") 
@Data 
public class TemplateUser { 

    @Id 
    @Column(name = "TEMPLATE_CONFIG_ID", nullable = false) 
    private Long configId; 

    @Column(name = "APP_CODE", nullable = false, length = 100) 
    private String appCode; 
    ... 
} 

更新

上傳的樣本項目: https://git.io/v5SWx

+0

你可以發佈你的實體是怎麼樣的嗎?你需要讓他們用@Entity註釋標記 –

+0

添加實體 – Srini

+0

你是否嘗試過設置'spring.jpa.hibernate.ddl-auto:create'屬性? https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-initialize-a-database-using-jpa –

回答

0

彈簧引導加載data.sql或數據 - $ {}財產以後.SQL

你可以做:

  • spring.datasource.platform = h2。
  • spring.datasource.data = myscript-test.sql。 (位置可以改變這個屬性)

我有一個項目,並與h2工作。

只是最後的選擇,如果你無法加載信息,也許你可以在你的應用程序文件中使用CommandLineRunner和jdbc模板。

+0

我沒有加載data.sql的問題,它是運行sql的順序,sql似乎在創建表之前運行。我提供了一個示例項目的鏈接,其中強調了該問題。 – Srini

-1

在情況下,如果你在你的項目中使用Hibernate,那麼您可以在類路徑中使用import.sql。只有在創建表後,它纔會初始化數據庫。

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html#howto-initialize-a-database-using-hibernate

+0

歡迎您提供解決方案的鏈接,但請確保您的答案在沒有它的情況下很有用:[在鏈接周圍添加上下文](// meta.stackexchange.com/a/8259),所以你的用戶會有一些想法是什麼以及爲什麼它在那裏,然後引用你鏈接到的頁面最相關的部分,以防目標頁面不可用。[答案只是一個鏈接可能會被刪除。](// stackoverflow.com/help/deleted-answers) – geisterfurz007

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。可能會失效如果鏈接的頁面改變。 - [來自評論](/ review/low-quality-posts/18849877) –