2013-07-23 110 views
0

我對Spring Batch很新。我試圖運行一個簡單的spring批處理示例,這是我從網上獲得的。該示例只是試圖從平面文件讀取並將內容寫入單獨的平面文件。關於春季批次

下面是我加載到上下文(通過ContextLoaderListener)的XML。

測試batch.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://172.18.7.57/spring-beans.dtd"> 

<beans> 
<bean id="simpleJob" 
class="org.springframework.batch.core.job.SimpleJo b"> 
<property name="name" value="simpleJob" /> 
<property name="steps"> 
<list> 
<ref local="step" /> 
</list> 
</property> 
<property name="jobRepository" ref="jobRepository" /> 
</bean> 

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

<bean id="jobRepository" 
class="org.springframework.batch.core.repository.s upport.SimpleJobRepository"> 
<constructor-arg> 
<bean 
class="org.springframework.batch.core.repository.d ao.MapJobInstanceDao" /> 
</constructor-arg> 
<constructor-arg> 
<bean 
class="org.springframework.batch.core.repository.d ao.MapJobExecutionDao" /> 
</constructor-arg> 
<constructor-arg> 
<bean 
class="org.springframework.batch.core.repository.d ao.MapStepExecutionDao" /> 
</constructor-arg> 
</bean> 


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

<bean id="step" 
class="org.springframework.batch.core.step.item.Si mpleStepFactoryBean"> 
<property name="transactionManager" ref="transactionManager" /> 
<property name="jobRepository" ref="jobRepository" /> 
<property name="itemReader" ref="itemReader" /> 
<property name="itemWriter" ref="itemWriter" /> 
</bean> 


<bean id="lineAggregator" 
class="org.springframework.batch.item.file.transfo rm.DelimitedLineAggregator"> 
<property name="delimiter" value="|" /> 
</bean> 

<bean id="itemWriter" 
class="org.springframework.batch.item.file.FlatFil eItemWriter"> 
<property name="fieldSetCreator" ref="fieldSetMapper" /> 
<property name="lineAggregator" ref="lineAggregator" /> 
<property name="resource" value="file:/hello2.txt" /> 
</bean> 

<bean id="lineTokenizer" 
class="org.springframework.batch.item.file.transfo rm.DelimitedLineTokenizer" /> 

<bean id="fieldSetMapper" 
class="org.springframework.batch.item.file.mapping .PassThroughFieldSetMapper" /> 

<bean id="itemReader" 
class="org.springframework.batch.item.file.FlatFil eItemReader"> 
<property name="resource" value="file:/hello1.txt" /> 
<property name="lineTokenizer" ref="lineTokenizer" /> 
<property name="fieldSetMapper" ref="fieldSetMapper" /> 
</bean> 
</beans> 

由於我沒有行家,我想從我的Java代碼一樣推出這份工作,

ApplicationContext context = new FileSystemXmlApplicationContext("D:\\jboss-4.0.5.GA\\server\\default\\deploy\\test.war\\WEB-INF\\xml\\test-batch.xml"); 

Job job; 

job = (Job) context.getBean("simpleJob"); 
JobParameters jobParameters = jobParametersConverter.getJobParameters(StringUtils 
.splitArrayElementsIntoProperties(new String[]{"D:\\jboss-4.0.5.GA\\server\\default\\deploy\\venki.war\\WEB-INF\\xml\\venki-batch.xml","simpleJob"}, "=")); 

JobExecution jobExecution = launcher.run(job, jobParameters); 

- 但是,有一些誤差是Eclipse拋出說沒有類裝載機發現....下面是我得到的錯誤....

org.apache.commons.lang.SerializationException: java.lang.ClassNotFoundException: No ClassLoaders found for: org.springframework.batch.core.JobExecution 
    at org.apache.commons.lang.SerializationUtils.deseria lize(SerializationUtils.java:164) 
    at org.apache.commons.lang.SerializationUtils.deseria lize(SerializationUtils.java:191) 
    at org.springframework.batch.core.repository.dao.MapJ obExecutionDao.copy(MapJobExecutionDao.java:33) 
    at org.springframework.batch.core.repository.dao.MapJ obExecutionDao.saveJobExecution(MapJobExecutionDao .java:56) 
    at org.springframework.batch.core.repository.support. SimpleJobRepository.saveOrUpdate(SimpleJobReposito ry.java:216) 
    at org.springframework.batch.core.repository.support. SimpleJobRepository.createJobExecution(SimpleJobRe pository.java:192) 
    at org.springframework.batch.core.launch.support.Simp leJobLauncher.run(SimpleJobLauncher.java:79) 
    at com.venki.handler.TestHandler.testSpringBatch(Test Handler.java:111) 

- 請幫我在這方面......我需要找出一個代碼,從一個平面文件讀取並插入到數據庫....我需要將其整合到一個獨立的模塊,我不應該去使用maven ....

回答

0

爲什麼你不運行它通過使用org.springframework.batch.core.launch.support.CommandLineJobRunner
您可以將其定義爲您的主要類別eclise的運行配置
在參數給

<your batch-job-xml-file><space><your Job (in your case its simpleJob)> 

你不需要太Maven的在這裏。只需設置所需庫的類路徑。

0

示例Spring Batch足球項目從CSV文件讀取並使用JDBC寫入數據庫。

您可以找到詳細信息here,下載鏈接位於該頁面的頂部。

就Maven而言,你不需要它,但是你必須手動在你的類路徑中包含所有需要的庫。如果您通過Eclipse運行它,請觸發CommandLineJobRunner

+0

我也試過,但沒有運氣。 –