Spring Batch Admin - ошибка создания экземпляра Bean «jobService»

Я использую spring-batch-admin-manager-1.2.2.RELEASE вместе с spring-batch 2.2.3.RELEASE в своем проекте. Я пытаюсь использовать консоль администратора весенней партии вместе с моим веб-приложением для мониторинга пакетных заданий. Когда я развертываю свое веб-приложение на tomcat, я получаю следующую ошибку инициализации приложения. Я просмотрел этот тикет JIRA https://jira.springsource.org/browse/BATCHADM-151 в котором упоминается, что эта ошибка была исправлена ​​для поддержки Spring Batch 2.2.0, но версия spring-batch-admin-manager, выпущенная для этого исправления, говорит, что это 1.3.0. Я не смог найти 1.3.0 нигде в репозитории maven, и я не могу развернуть свое приложение вместе с Spring Batch Admin. Я что-то упустил здесь?

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jobService': FactoryBean threw exception on object creation; nested exception is java.lang.NoSuchMethodError: org.springframework.batch.admin.service.JdbcSearchableJobInstanceDao.setJdbcTemplate(Lorg/springframework/jdbc/core/simple/SimpleJdbcOperations;)V
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:102)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1442)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:323)
... 86 more
Caused by: java.lang.NoSuchMethodError: org.springframework.batch.admin.service.JdbcSearchableJobInstanceDao.setJdbcTemplate(Lorg/springframework/jdbc/core/simple/SimpleJdbcOperations;)V
at org.springframework.batch.admin.service.SimpleJobServiceFactoryBean.createJobInstanceDao(SimpleJobServiceFactoryBean.java:195)
at org.springframework.batch.admin.service.SimpleJobServiceFactoryBean.getObject(SimpleJobServiceFactoryBean.java:255)
at org.springframework.batch.admin.service.SimpleJobServiceFactoryBean.getObject(SimpleJobServiceFactoryBean.java:54)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 91 more

Вот мой файл web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>rcg-webapp</display-name>

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<!-- Spring Batch Admin Configuration -->

<env-entry>
    <env-entry-name>ENVIRONMENT</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>mysql</env-entry-value>
</env-entry>

<servlet>
    <servlet-name>Batch Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!-- <param-value>classpath*:/org/springframework/batch/admin/web/resources/servlet-config.xml,classpath*:/org/springframework/batch/admin/web/resources/webapp-config.xml</param-value> -->
        <param-value>classpath:register-spring-admin-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
</web-app>

Вот содержимое файла register-spring-admin-servlet.xml в папке src.main.resources:

<?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-2.0.xsd">

<import resource="classpath*:/META-INF/spring/batch/servlet/resources/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/servlet/manager/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/servlet/override/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/bootstrap/**/*.xml" />
<import resource="classpath*:/META-INF/spring/batch/override/**/*.xml" />

<!-- Override the standard location for spring batch admin resources -->
<bean id="resourceService" class="org.springframework.batch.admin.web.resources.DefaultResourceService">
    <property name="servletPath" value="/batch" />
</bean>

<bean id="parameterUnpackerFilter" class="org.springframework.batch.admin.web.filter.ParameterUnpackerFilter">
    <property name="prefix" value="unpack_"/>
    <property name="putEmptyParamsInPath" value="true"/>
</bean>

</beans>

Вот мой application-context.xml в папке src.main.resources:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context
xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<bean id="resourceService"
        class="org.springframework.batch.admin.web.resources.DefaultResourceService">
    <property name="servletPath" value="/admin-console" />
</bean>

 <!-- stored job-meta in database -->
<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="databaseType" value="mysql" />
</bean>

<bean id="transactionManager"
    class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

<bean id="jobLauncher"
    class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
</bean>
</beans>

Вот содержимое файла datasource.xml в папке src.main.resources/META-INF/spring/batch/override:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd">

<!-- connect to MySQL database -->
<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
     <property name="driverClassName" value="${batch.jdbc.driver}" />
    <property name="url" value="${batch.jdbc.url}" />
    <property name="username" value="${batch.jdbc.user}" />
    <property name="password" value="${batch.jdbc.password}" />
</bean>

<bean id="transactionManager"
    class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

<jdbc:initialize-database data-source="dataSource" enabled="${batch.data.source.init}" ignore-failures="DROPS">
    <jdbc:script location="${batch.drop.script}"/>
    <jdbc:script location="${batch.schema.script}"/>
    <jdbc:script location="${batch.business.schema.script}"/>
</jdbc:initialize-database>
</beans>

person Anand    schedule 21.02.2014    source источник


Ответы (1)


Мне также было трудно настроить проект spring-batch-admin, так как в сети не так много руководств. Наконец я нашел этот пример проекта , что является хорошей отправной точкой.

Если вы используете STS, вы можете получить к нему доступ через: File -> New -> Spring project -> Batch -> Simple Batch Admin Webapp

РЕДАКТИРОВАТЬ: Что касается spring-batch-admin-manager 1.3.0, я также не вижу окончательного выпуска. Но вы можете попробовать последнюю веху, которая кажется достаточно стабильной, чтобы ее можно было включить в вышеупомянутый образец проекта.

Поместите это в свой pom.xml

<dependency>
  <groupId>org.springframework.batch</groupId>
  <artifactId>spring-batch-admin-manager</artifactId>
  <version>1.3.0.M1</version>
</dependency>

<repository>
  <id>spring-milestones</id>
  <url>http://repo.springsource.org/libs-milestone/</url>
</repository>

Удачи!

person achingfingers    schedule 21.02.2014
comment
Спасибо за ваш комментарий! Но я не пытаюсь создать новое веб-приложение с помощью STS. Я хочу интегрировать spring-batch-admin-manager в свое уже существующее веб-приложение, используя spring-batch-admin-manager-1.2.2.RELEASE.jar - person Anand; 21.02.2014
comment
Я понимаю. моя вина. Я отредактировал свой ответ. Может веха поможет. - person achingfingers; 21.02.2014