2017-02-19 6 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アプリケーションを開発する際に多くの時間とエネルギーを節約できます。その優れた機能の1つは、データベースの初期化です。あなたはSQLデータベースを初期化するためにスプリングブートを使用することができます。

org.springframework:spring-jdbc dependencyは、データベースの初期化を支援する依存関係です。

classpathにロードされるようにschema.sqlファイルをリソースフォルダに追加するだけで済みます。 schema.sqlファイルには、データベースに必要なすべてのテーブル定義、ここではクォーツ・スキーマが含まれています(クォーツ・ディストリビューション内にあります)。追加する次のファイルは、resourcesフォルダにdata.sqlです。このファイルには、データベースを生成するために必要なSQL文が含まれます。石英についてはこれを無視してください。

初期化時に、springブートでschema.sqlファイルとdata.sqlファイルが検索され、データベース初期化子で実行されます。

関連する問題