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

Spring批处理再次尝试创建持久批处理作业存储库

宋臻
2023-03-14

这似乎是一个愚蠢的问题。我正在尝试为Spring Batch作业存储库(Spring Batch 2.1.7)配置Oracle10g数据库,我能够使用在core中的org/spring框架/批/core/schema-oracle10g.sql可用的脚本创建表。我还将属性batch.data.source.init设置为false。

在干净的数据库上,我的批处理程序运行良好,成功地创建了所有批处理表/序列,并用批处理结果的详细信息填充它们。然而,当我再次运行它时,Spring Batch试图再次创建这些表,并抛出“ORA-00955: name已经被一个现有对象使用”异常。我做错了什么?

# For Oracle
batch.jdbc.driver=oracle.jdbc.driver.OracleDriver
batch.jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
batch.jdbc.user=****
batch.jdbc.password=****
batch.schema=****
batch.schema.script=classpath:/org/springframework/batch/core/schema-oracle10g.sql
batch.drop.script=classpath:/org/springframework/batch/core/schema-drop-oracle10g.sql
batch.jdbc.testWhileIdle=true
batch.data.source.init=false

以下是我的上下文文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:batch="http://www.springframework.org/schema/batch"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:property-placeholder location="classpath:batch.properties" />

    <context:component-scan base-package="com.myco.mypack" />

    <jdbc:initialize-database data-source="dataSource">
        <jdbc:script location="${batch.schema.script}" />
    </jdbc:initialize-database>

    <import resource="classpath:/META-INF/spring/module-context.xml" />

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

    <bean id="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager" lazy-init="true">
        <property name="dataSource" ref="dataSource" />   
    </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="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${batch.jdbc.driver}" />
        <property name="url" value="${batch.jdbc.url}" />
        <property name="username" value="${batch.jdbc.user}" />
        <property name="password" value="${batch.jdbc.password}" />
    </bean>
</beans>

共有3个答案

宋腾
2023-03-14
<jdbc:initialize-database data-source="dataSource" 
                      enabled="${batch.data.source.init}">
<jdbc:script location="${batch.schema.script}" />

如果我传递命令行参数-Dbatch.data.source.init=false,则初始化未启用。

但是如果我使用下面的配置并在上下文xml中将enabled设置为false,那么即使enabled标志为false也会触发初始化

<jdbc:initialize-database data-source="dataSource" 
                      enabled="false">
<jdbc:script location="false" />
丁宏浚
2023-03-14

这已经有一段时间了,但我认为对于搜索这个问题的人来说,知道您可以通过使用禁用创建数据库会有所帮助

spring.batch.initializer.enabled=false

在 application.properties 中,如文档中所示:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

袁飞鹏
2023-03-14

我没有看到使用 batch.data.source.init,如下所示:

<jdbc:initialize-database data-source="dataSource" 
                          enabled="${batch.data.source.init}">
    <jdbc:script location="${batch.schema.script}" />
</jdbc:initialize-database>
 类似资料:
  • 我已经开始探索Spring Batch,并遇到了一些基本问题。

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以点击 或 来将已选择的工作或所有工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除已选择工作或所有工作,请点击 或 。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可在已选择的工作列表中拖拉工作到所需的位

  • 添加工作到批处理作业 在“常规”选项卡的底部窗格中,选择工作类型,然后如有需要浏览连接、数据库和/或模式以找出你想运行的工作。 你可以双击或拖放工作来将工作从“可用的工作”列表移动到“已选择的工作”列表。若要从已选择的工作列表删除工作,请以相同的方式移除它们。你可以在一个批处理作业中运行来自不同服务器的配置文件。 若要重新排序工作的序列,可使用 “上移”或 “下移”按钮。 如果你想备份整个服务器,

  • Spring批处理作业与flatfileitemreader(从csv读取)、processor(更新adwords api提要详细信息,对于csv文件中的每个记录(大约有40条记录),这一步大约需要40秒)和正在更新DB中记录的定制writer一起使用。 web.xml