无法打开java类路径资源[org/quartz/impl/jdbcjobstore/tables_h2.sql],因为它不存在
我正在尝试使用H2数据库来测试我的quartz应用程序,它正在使用SpringBoot运行。 我的申请书。属性如下所示:
#DB Properties
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url = jdbc:h2:mem:test
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.continueonerror=true
#Quartz
quartz.enabled=true
quartz.initialize-schema=never
org.quartz.jdbc.initialize-schema=never
quartz.schedulerAutoStart=false
quartz.fileName=application-integrationtest.properties
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.makeSchedulerThreadDaemon = true
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.makeThreadsDaemons = true
org.quartz.threadPool.threadCount: 20
org.quartz.threadPool.threadPriority: 5
#============================================================================
# Configure JobStore
#============================================================================
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.jobStore.dataSource = myDs
org.quartz.jobStore.misfireThreshold = 25000
#============================================================================
# Configure Datasources
#============================================================================
org.quartz.dataSource.myDS.driver = org.h2.Driver
org.quartz.dataSource.myDS.URL = ${spring.datasource.url}
org.quartz.dataSource.myDS.maxConnections = 5
org.quartz.dataSource.myDS.validationQuery = select 1
但它在运行testcase时抛出以下异常
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'quartzDataSourceInitializer': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.CannotReadScriptException: Cannot read SQL script from class path resource [org/quartz/impl/jdbcjobstore/tables_h2.sql]; nested exception is java.io.FileNotFoundException: class path resource [org/quartz/impl/jdbcjobstore/tables_h2.sql] cannot be opened because it does not exist
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:138)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:422)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1694)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$120/502891368.getObject(Unknown Source)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584)
... 45 more
Caused by: org.springframework.jdbc.datasource.init.CannotReadScriptException: Cannot read SQL script from class path resource [org/quartz/impl/jdbcjobstore/tables_h2.sql]; nested exception is java.io.FileNotFoundException: class path resource [org/quartz/impl/jdbcjobstore/tables_h2.sql] cannot be opened because it does not exist
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:453)
at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.populate(ResourceDatabasePopulator.java:240)
at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:48)
at org.springframework.boot.jdbc.AbstractDataSourceInitializer.initialize(AbstractDataSourceInitializer.java:65)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:365)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:308)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:135)
... 60 more
Caused by: java.io.FileNotFoundException: class path resource [org/quartz/impl/jdbcjobstore/tables_h2.sql] cannot be opened because it does not exist
at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)
at org.springframework.core.io.support.EncodedResource.getReader(EncodedResource.java:146)
at org.springframework.jdbc.datasource.init.ScriptUtils.readScript(ScriptUtils.java:282)
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:450)
我是否缺少一些配置
所有与石英相关的罐子都不包含表2。sql。如何将其包含在我的类路径中
# 1 楼答案
我刚从maven存储库下载了
quartz
jar,那里有table_h2.sql
文件:https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0
您也可以在github上找到它,在github存储库中:tables_h2.sql
因此,请检查您是否正在使用过时版本的库,以及您是否具有正确的依赖关系。看起来这些sql文件是从另一个包(commit)中为
2.3.0
版本版本移动的,所以如果您使用的是最新的spring引导版本,您应该升级quartz,或者可能降级spring引导版本如果您使用的是spring boot,建议使用在
spring-boot-starter-parent
中指定的versions属性,在您的情况下,有一个属性quartz.version
,其值为2.3.0
表示spring-boot 2.0.0.RELEASE
,因此在maven中它看起来像:在格拉德尔,你也会有类似的东西
# 2 楼答案
SpringBoot2+中的另一个解决方案(在不使用Quartz的情况下)是将其从依赖项列表中排除。在我的情况下,我不得不添加这个排除。(请参阅pom文件以查看正确的groupId和artiactId,因为可以使用不同的groupId和artiactId)
我之所以发布这篇文章,是因为这个错误导致了我发布这篇文章