2017-02-19 33 views
1

我想與春天開機運行集成測試,並收到以下錯誤:SchedulerFactory是否可以在啓動時爲石英創建表格?

Caused by: org.springframework.context.ApplicationContextException: 
Failed to start bean 'SchedulerFactory'; nested exception is org.springframework.scheduling.SchedulingException: 
Could not start Quartz Scheduler; nested exception is org.quartz.SchedulerConfigException: 
Failure occured during job recovery. [See nested exception: 
org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Table "QRTZ_LOCKS" not found; SQL statement: 
SELECT * FROM QRTZ_LOCKS UPDLOCK WHERE LOCK_NAME = ? [42102-193] [See nested exception: org.h2.jdbc.JdbcSQLException: Table "QRTZ_LOCKS" not found; SQL statement: 
SELECT * FROM QRTZ_LOCKS UPDLOCK WHERE LOCK_NAME = ? [42102-193]]] 
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:176) 

顯然,QRTZ表沒有創建。我可以手動創建它們,但它是真的,彈簧引導是不是能夠創建它們時,他們不存在?如果是這樣的話,看起來非常平庸,因爲這些表只需要在啓動時創建一次,像create if not exisit這樣的sql語句就足夠了。那麼春季開機會自動創建QRTZ表嗎?

+0

錯誤消息說沒有名爲QRTZ_LOCKS的表。你說「'QRTZ'表沒有被創建」;你的意思是說有代碼在拋出這個異常的代碼之前創建QRTZ_LOCKS表? – arcy

+0

'有一個代碼可以創建...'是的,問題就在於此。該代碼是否存在? – Cherry

回答

1

不,彈簧引導不會自動創建石英錶。如果你想自動創建,你需要使用Spring Boot的Datasource Initializer功能,它會自動爲你創建表格。

正如你已經知道的那樣,Spring引導讓我們在開發Spring應用程序時節省了大量的時間和精力。數據庫初始化的好處之一就是其優點。你可以使用spring啓動來初始化你的sql數據庫。

org.springframework:spring-jdbc依賴關係是輔助數據庫初始化的依賴項。

您只需將schema.sql文件添加到資源文件夾,以便將其加載到類路徑。 schema.sql文件將包含我們的數據庫所需的所有表定義,這裏是石英模式(在石英分佈中找到它)。下一個要添加的文件是資源文件夾中的data.sql。該文件將包含填充我們的數據庫所需的sql語句。忽略這個石英。

初始化時,spring會搜索schema.sql和data.sql文件,並使用數據庫初始化程序執行它們。

相關問題