Весенний пакет пытается снова создать персистентное пакетное задание Respository


Это кажется глупым вопросом. Я пытаюсь настроить базу данных Oracle10g для репозитория пакетных заданий Spring (Spring Batch 2.1.7), мне удалось создать таблицы с помощью скрипта, доступного в org/springframework/batch/core/schema-oracle10g.sql в core. Я также установил свойство batch.данные.источник.init to false .

На чистой базе данных моя пакетная программа работает нормально, успешно создавая все пакетные таблицы / последовательности и заполняя их подробности результатов партии. Однако при повторном запуске Spring Batch снова пытается создать эти таблицы и выдает исключение" ORA-00955: name is already used by an existing object". Что я делаю не так?

# 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 5

3 ответа:

Я не вижу пользы от пакетной обработки.данные.источник.init Вот так:

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

Прошло некоторое время, но я думаю, что для людей, ищущих эту проблему, будет полезно знать, что вы можете отключить создание баз данных с помощью

spring.batch.initializer.enabled=false

В применении.свойства, указанные в документации: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

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

Если я передаю аргумент командной строки-Dbatch.данные.источник.init=false, то инициализация не включена.

Но если я использую нижеприведенную конфигурацию и устанавливаю enabled в false в контексте xml, то инициализация инициализируется, даже если флаг enabled имеет значение false

<jdbc:initialize-database data-source="dataSource" 
                      enabled="false">
<jdbc:script location="false" />