当前位置: 首页 > 知识库问答 >
问题:

到Oracle数据库的Spring批处理连接

祁绪
2023-03-14
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:batch="http://www.springframework.org/schema/batch" 
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/batch
    http://www.springframework.org/schema/batch/spring-batch-2.2.xsd
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">

<bean id="report" class="com.mkyong.model.Report" scope="prototype" />

<batch:job id="reportJob">
    <batch:step id="step1">
        <batch:tasklet>
            <batch:chunk reader="cvsFileItemReader" writer="oracleItemWriter"
                commit-interval="2">
            </batch:chunk>
        </batch:tasklet>
    </batch:step>
</batch:job>

<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">

    <!-- Read a csv file -->
    <property name="resource" value="classpath:cvs/report.csv" />

    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">

            <!-- split it -->
            <property name="lineTokenizer">
                <bean
                    class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="names" value="date,impressions,clicks,earning" />
                </bean>
            </property>

            <property name="fieldSetMapper">

                <!-- return back to reader, rather than a mapped object. -->
                <!--
                    <bean class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" />
                -->

                <!-- map to an object -->
                <bean
                    class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="report" />
                </bean>

            </property>

        </bean>
    </property>

</bean>

<bean id="oracleItemWriter"
    class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <property name="dataSource" ref="dataSource" />
    <property name="sql">
        <value>
        <![CDATA[        
            insert into RAW_REPORT(DATE1,IMPRESSIONS,CLICKS,EARNING) values (:date, :impressions, :clicks, :earning)
        ]]>
        </value>
    </property>
    <!-- It will take care matching between object property and sql name parameter -->
    <property name="itemSqlParameterSourceProvider">
        <bean
            class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
    </property>
</bean>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
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
    http://www.springframework.org/schema/jdbc 
    http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd">

<!-- connect to database -->
<!-- <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/Sakila" />
    <property name="username" value="root" />
    <property name="password" value="" />
</bean> -->

<!-- <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository"/>
</bean>
<!-- <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" />
     <property name="tablePrefix" value="BATCH_"/>
     <property name="isolationLevelForCreate" value="ISOLATION_DEFAULT"/>
</bean>   -->

<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
<property name="transactionManager" ref="transactionManager" />
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
    <property name="username" value="system"/>
    <property name="password" value=""/>
</bean>

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

<!-- create job-meta tables automatically -->
<!-- <jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="org/springframework/batch/core/schema-drop-mysql.sql" />
    <jdbc:script location="org/springframework/batch/core/schema-mysql.sql" />
</jdbc:initialize-database> -->


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

</jdbc:initialize-database>

context.xml

<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">

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

<!-- stored job-meta in memory -->
<!-- 
<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
    <property name="transactionManager" ref="transactionManager" />
</bean>
-->

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

感谢Sh AntiBhushan

共有1个答案

赫连泰宁
2023-03-14

运行脚本的顺序是,首先删除模式/表,然后创建模式/表。

即。

<jdbc:script location="classpath:/org/springframework/batch/core/schema-drop-oracle10g.sql" />

<jdbc:script location="classpath:/org/springframework/batch/core/schema-oracle10g.sql" />

您使用的是相反的序列,这意味着删除表-因此,您得到表或视图不存在。(因为删除了表/模式)

 类似资料:
  • 创建名为“step1”的bean时出错:设置bean属性“job repository”时无法解析对bean“job repository”的引用;嵌套异常为org.springframework.beans.factory.BeanCreationException:创建类路径资源[spring/batch/config/spring-batch-contextoriginal.xml]中定义的

  • 组织。springframework。jdbc。BadSqlGrammarException:PreparedStatementCallback;错误的SQL语法[从批处理作业实例中选择作业实例ID、作业名称,其中作业名称=?按作业实例ID描述排序];嵌套的例外是java。sql。SQLSyntaxErrorException:ORA-00942:表或视图不存在

  • 主要内容:使用SQL * Plus连接到Oracle数据库服务器,使用SQL Developer连接到Oracle数据库服务器在本教程中,您将学习如何使用和SQL Developer 工具连接到Oracle数据库服务器。 使用SQL * Plus连接到Oracle数据库服务器 是安装Oracle数据库服务器或客户端时自动安装的交互式查询工具。 有一个命令行界面,允许您连接到Oracle数据库服务器并交互执行语句。 注意:如果有使用过MySQL或PostgreSQL,与MySQL中的mysql程序

  • 我使用Spring批处理从Oracle数据库读取数据并将结果写入CSV文件。 我还需要将spring批处理元数据表与oracle数据库分开,为此,我在批处理配置中配置了两个不同的数据源(spring批处理元数据的内存数据库)。 这是我的代码: 批处理配置。JAVA 然后我的itemReader bean看起来像: 当我运行批处理时,一切正常。 但是当我尝试在我的BatchApplication中添

  • 当springbatch试图获得到元数据表的连接时,我们的应用程序中会周期性地出现错误。似乎我们在某个地方或某种程度上存在泄漏,无法释放或关闭连接。 我正在寻找的是一些方法,当Spring Batch日志从池中获取连接时,释放连接回到池中,等等。然后我们可以试着确定漏洞在哪里。

  • 我有一个使用JPA的Spring Boot应用程序,它有一个PostgreSQL数据库。我使用的是Spring Batch。场景是我正在读取一个文件并将数据写入PostgreSQL数据库。当程序在数据库中创建Spring Batch使用的元数据表时,它与PostgreSQL一起工作。但我需要的是Spring Boot不要创建元数据表,并通过Spring Batch使用内存中基于映射的作业存储库。我