У меня есть успокаивающее приложение API, разработанное весной 4 и работающее на tomcat 7 (с jdk8). Теперь я попытался развернуть его на tomcat 9 (сборка и запуск с jdk8), файл war, созданный без каких-либо проблем.Но tomcat 9 в Linux не удалось запустить, ошибка:
17: 44: 02: 821 WARN [XmlWebApplicationContext] - Возникла исключительная ситуация во время инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'ediFeedTask', определенным в ресурсе пути к классу [spring-scheduler.xml]: сбой вызова метода init;вложенное исключение: java.lang.InstantiationError: org.quartz.JobDetail 17: 44: 02: 839 ERROR [ContextLoader] - сбой при инициализации контекста org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем «ediFeedTask», определенного в классересурс ресурса [spring-scheduler.xml]: сбой вызова метода init;вложенное исключение: java.lang.InstantiationError: org.quartz.JobDetail at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory ~..9.RELEASE]
По сути, ему не удалось создать экземпляр компонента, определенного в xml весеннего кварца.Потому что, если я закомментирую все определения bean-компонентов в своем spring-scheduler.xml, приложение запустится успешно.Бобы все запланированные работы.
Но я не понимаю, почему у tomcat9 возникла проблема создания экземпляра bean-компонента для кварцевого планировщика.Он хорошо создает экземпляры bean-компонентов в других xmls, таких как api-config.xml или spring-controller.xml.
Самое странное, что тот же самый файл войны, развернутый и успешно запущенный в windows tomcat 9, только что провалившийся в tomcat 8 и 9 в linux (ubuntu, deepin), кто-нибудь знает?
Ниже мой spring-scheduler.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="ediFeedJob" class="com.ai.api.job.EDIFeedJob" />
<bean id="ediFeedTask"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="concurrent" value="false" />
<property name="targetObject" ref="ediFeedJob" />
<property name="targetMethod" value="execute" />
</bean>
<bean id="ediFeedCronTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="ediFeedTask" />
<property name="cronExpression" value="0 2 * * * ?"/>
</bean>
<bean id="startQuartz" lazy-init="false"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="ediFeedCronTrigger" />
</list>
</property>
</bean>
</beans>