InstantiationError: org.quartz.JobDetail приводит к сбою запуска tomcat9 в Linux, но хорошо в Windows - PullRequest
0 голосов
/ 31 мая 2019

У меня есть успокаивающее приложение 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> 

1 Ответ

0 голосов
/ 20 июня 2019

На самом деле это проблема зависимости maven.Это не очевидно как «класс XXX не найден», как мы обычно видим, но в этом случае он жалуется на «InstantiationError: org.quartz.JobDetail» - поэтому мы можем предположить, что что-то не так с самой пружиной.

После проверки конфликтов в зависимости maven я вижу ссылки на spring-beans 2.0.3, хотя обычно она должна быть как минимум новее 4.0.Так что просто исключите его

<dependency>
<groupId>org.springmodules</groupId>
<artifactId>spring-modules-jakarta-commons</artifactId>
<version>${spring.modules.jakarta.commons.version}</version>
<exclusions>
    <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
    </exclusion>
    <exclusion>
        <groupId>org.springframework</groupId>
        <artifactId>spring-support</artifactId>
    </exclusion>
</exclusions>

тогда проблема решена.

...