SchedulerFactory能否在启动时为石英创建表格?

时间:2017-02-19 12:55:10

标签: java spring quartz quartz-persistence

我正在尝试使用spring boot运行集成测试并收到以下错误:

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语句就足够了。那么spring boot会自动创建QRTZ表吗?

1 个答案:

答案 0 :(得分:1)

不,弹簧启动不会自动创建石英表。如果你想自动创建,你需要使用Spring Boot的Datasource Initializer功能,它会自动为你创建表。

正如您所知道的,Spring启动了一个很棒的框架,在开发Spring应用程序时为开发人员节省了大量的时间和精力。它的一个重要功能是数据库初始化。您可以使用spring boot来初始化sql数据库。

org.springframework:spring-jdbc依赖项是协助数据库初始化的依赖项。

您只需要将schema.sql文件添加到资源文件夹,以便将其加载到classpath。 schema.sql文件将包含我们数据库所需的所有表定义,这里是quartz schema(在quartz分析中找到它)。要添加的下一个文件是resources文件夹上的data.sql。该文件将包含填充数据库所需的sql语句。忽略石英。

在初始化时,spring boot将搜索schema.sql和data.sql文件,并使用Database初始化程序执行它们。