猿问

无法使用 Spring Batch 框架连接到 Oracle 数据源

我有一个小项目,用于学习 Spring Batch。我想从 Oracle 数据库读取数据并写入 XML 文件,但出现错误:

创建名为“step1”的 bean 时出错:设置 bean 属性“jobRepository”时无法解析对 bean“jobRepository”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [Spring/batch/config/spring-batch-contextOriginal.xml] 中定义名称为“jobRepository”的 bean 创建时出错:设置属性值时出错;嵌套异常是 org.springframework.beans.NotWritablePropertyException: Invalid property 'dataSource' of bean class [org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean]: Bean 属性 'dataSource' 不可写或具有无效的 setter 方法。setter 的参数类型是否与 getter 的返回类型匹配?

我想我把所有东西都放进去了,但我认为这个错误最重要的东西是:spring-batch-context.xmlspring-datasource.xml。我错过了什么还是有什么问题?如果您需要更多详细信息,请告诉我。谢谢你。(我在不使用数据库的情况下尝试了该示例,并且效果很好。)

spring-batch-context.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-3.2.xsd">


 <import resource="../jobs/jobPerson.xml"/>

  <import resource="../config/spring-datasource.xml" /> 


   <!--  <context:annotation-config />

    <tx:annotation-driven transaction-manager="transactionManager"/>a PlatformTransactionManager is still required

     -->


    <!-- JobRepository and JobLauncher are configuration/setup classes -->

    <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" >

       <property name="dataSource" ref="dataSource" /> 

       <property name="transactionManager" ref="transactionManager" />

       <property name="databaseType" value="oracle" /> 

    </bean>


温温酱
浏览 228回答 1
1回答

宝慕林4294392

在MapJobRepositoryFactoryBean不具备的属性dataSource,transactionManager和databaseType。您应该使用JobRepositoryFactoryBean代替MapJobRepositoryFactoryBean:所以替换这个:<!-- JobRepository and JobLauncher are configuration/setup classes --><bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" >&nbsp; &nbsp;<property name="dataSource" ref="dataSource" />&nbsp;&nbsp; &nbsp;<property name="transactionManager" ref="transactionManager" />&nbsp; &nbsp;<property name="databaseType" value="oracle" />&nbsp;</bean>有了这个:<!-- JobRepository and JobLauncher are configuration/setup classes --><bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean" >&nbsp; &nbsp;<property name="dataSource" ref="dataSource" />&nbsp;&nbsp; &nbsp;<property name="transactionManager" ref="transactionManager" />&nbsp; &nbsp;<property name="databaseType" value="oracle" />&nbsp;</bean>它应该工作。
随时随地看视频慕课网APP

相关分类

Java
我要回答