2012-04-05 11 views
5

Esto parece ser un problema estúpido. Estoy tratando de configurar una base de datos Oracle10g para Spring Batch Job Repository (Spring Batch 2.1.7), pude tener las tablas creadas usando la secuencia de comandos disponible en org/springframework/batch/core/schema-oracle10g.sql en núcleo. También establecí la propiedad batch.data.source.init en false.Por lotes de primavera tratando de crear repositorio de trabajo por lotes persistente de nuevo

En una base de datos limpia, mi programa por lotes funciona bien, crea correctamente todas las tablas/secuencias de Batch y las completa con los detalles de los resultados del lote. Sin embargo, cuando lo ejecuto nuevamente, Spring Batch intenta crear estas tablas nuevamente y arroja la excepción "ORA-00955: el nombre ya es usado por un objeto existente". ¿Qué estoy haciendo mal?

# 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 

que sigue es mi archivo de contexto:

<?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> 
+0

por favor agregue la configuración xml donde usa el marcador de posición –

+0

Hola Michael, edité mi pregunta para agregar la configuración XML. – dchucks

Respuesta

4

no veo el uso de batch.data.source.init así:

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

Gracias Michael, había intentado incluso eliminar esto de mi XML, pero no estaba funcionando antes, ahora funciona. También con el atributo "habilitado" establecido en falso como sugirió. No estoy seguro de por qué el batch.data.source.init no funciona. – dchucks

+0

Y puede ser Michael. Puedo convencerlo para que responda una nueva pregunta trivial de novato en Spring Batch. ¿Podemos crear un nuevo trabajo (Programar un trabajo) o Eliminar uno existente a través del Administrador de lote de primavera (veo que la guía habla de cargar un XML para agregar un trabajo, pero parece tedioso, si hay una API, por qué no debería ¿podemos crear un trabajo sobre la marcha a través de la interfaz de usuario web de administración por lotes? – dchucks

+0

por favor agregue esto como una nueva pregunta para que otros puedan encontrarlo también :-) para mí mismo puedo decir - no lo sé administrador de lotes de primavera lo suficientemente bueno –

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

Si paso el argumento Línea de comando -Dbatch.data.source.init = false, entonces la inicialización no está habilitada.

Pero Si utilizo el siguiente configuración y conjunto activado en false en el xml contexto, a continuación, la inicialización se activa a pesar de que la bandera permitido es falso

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

3

Ha sido un tiempo, pero creo que para personas en busca de este problema que le ayudará a saber que usted puede desactivar la creación de las bases de datos mediante el uso de

spring.batch.initializer.enabled=false 

en application.properties como se da en t a documentación: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

+0

Gracias por esto.Tuve un problema al iniciar la aplicación al no poder realizar SET TRANSACTION aunque no tenía código de base de datos. Resulta que fue debido a los scripts sql predeterminados – canadiancreed

Cuestiones relacionadas