我正在尝试使用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
表吗?
答案 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初始化程序执行它们。