如何通过单击 jsp 页面中的按钮来执行 spring 批处理作业?

How to execute a spring batch job by clicking on a button in a jsp page?

我是 spring 批处理和 spring Mvc 的新手,我希望批处理作业(从数据库中提取数据并将其写入另一个数据库)从jsp 页面通过点击一个按钮(或者 link 如果可能的话) 我正在使用 spring Mvc。这是我的工作配置:

    <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="oracle" />
</bean>



<bean id="itemReader"
    class="org.springframework.batch.item.database.JdbcCursorItemReader"
    scope="step">
    <property name="dataSource" ref="dataSource" />
    <property name="sql"
        value="select id,name,qual from users" />
    <property name="rowMapper">
        <bean class="tn.com.spring.UserRowMapper" />
    </property>
</bean>

<bean id="oracleitemWriter"
    class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <property name="dataSource" ref="dataSource" />
    <property name="sql">
        <value>
        <![CDATA[        
            insert into users2(id,name,qual) 
        values (:id,:name,:qual)
        ]]>
        </value>
    </property>
    <property name="itemSqlParameterSourceProvider">
        <bean
            class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
    </property>
</bean>


<batch:job id="Job" job-repository="jobRepository">
    <batch:step id="step1">
        <batch:tasklet transaction-manager="transactionManager">
            <batch:chunk reader="itemReader" writer="oracleitemWriter"
                commit-interval=" 10">
            </batch:chunk>
        </batch:tasklet>
        </batch:step>

</batch:job>


<jdbc:initialize-database data-source="dataSource">
    <jdbc:script
        location="org/springframework/batch/core/schema-drop-oracle10g.sql" />
    <jdbc:script location="org/springframework/batch/core/schema-oracle10g.sql" />
</jdbc:initialize-database> 

这是我的工作控制器(我在网上找到了,但还是不行!)

@Component
@Controller()
public class JobController {

@Autowired
@Qualifier("JobLauncher")
private JobLauncher jobLauncher;

@Autowired
@Qualifier("Job")
private Job job;

@RequestMapping(value = "/job")
public void job() {
try {
    JobExecution execution = jobLauncher.run(job, new JobParameters());

} catch (Exception e) {
    throw new RuntimeException(e);

}
} 

}

这是按钮

<form action=" <%=application.getContextPath()%>/job" method="get">
<input type="submit" value="execute My job" />
</form> 

你能帮帮我吗?我的配置中缺少什么? 我很困惑 ! 提前致谢。

作为这个问题的解决方案,我编写了这个 javascript 代码来调用作业的执行:

    $(function() {

    $('#JobBtn').click(function() {
        $.get('${batchJobUrl}');
    });
});

并且在 jsp 页面中,您需要指定在 javascript 代码中编写的按钮的 ID:

<input type="button" value="execute job " id='JobBtn' class="btn" />

希望对大家有所帮助..