Integrating Spring Batch Admin into an existing application

亡梦爱人 提交于 2019-11-28 04:35:46

There is an easy way apparently according to this thread;

  • Define a DispatcherServlet for Batch Admin in web.xml:

    <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</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Batch Servlet</servlet-name>
        <url-pattern>/batch/*</url-pattern>
    </servlet-mapping>
    
  • Add an override for resourceService in the root appContext:

    <bean id="resourceService"
    class="org.springframework.batch.admin.web.resources.DefaultResourceService">
        <property name="servletPath" value="/batch" />
    </bean> 
    
  • Modify standard.ftl in spring-batch-admin-resources-1.2.0-RELEASE.jar to reflect the URL:

    <#assign url><@spring.url relativeUrl="${servletPath}/resources/styles/main.css"/></#assign>

If you are using Spring-batch-admin 1.2.1, you don't have to modify standard.ftl file. And you should add both servlet-config.xml and webapp-config.xml files from org/springframework/batch/admin/web/resources. Here are the steps (repeated again):

    <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>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

Add resourceService bean in your applicationContext:

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

I have embedded Spring Batch admin into my application that is packaged as a jar file. I did this because this app existed already and I run it using J2SE and not in a servlet container like Tomcat. Moreover I did not quite like the idea of having to deploy a web-server/servlet container for batch jobs. The Spring Batch Admin application is a good reference implementation and almost all interfaces may be replaced using custom classes via Spring DI. Moreover all UI was template driven. I therefore extracted the relevant resources and run the console using an embedded Jetty server that my application launches. This, in effect, has flipped the containment from app inside servlet container to servlet container inside app.

Screen shots are here : https://github.com/regunathb/Trooper/wiki/Trooper-Batch-Web-Console

Source, config resources etc are here : https://github.com/regunathb/Trooper/tree/master/batch-core (check the /src/main/resources/WEB-INF folder for web related configs and resources)

Instead of referencing the spring batch admin XML files like this:

<param-value>classpath*:/org/springframework/batch/admin/web/resources/servlet-config.xml</param-value>

you can also reference your own XML file

<param-value>classpath:eregister-spring-admin-servlet.xml</param-value>

Containing somethink like this:

<?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 de standard locatie van 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>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!