2012-04-05 36 views
5

Điều này có vẻ là một vấn đề ngu ngốc. Tôi đang cố gắng cấu hình một cơ sở dữ liệu Oracle10g cho kho lưu trữ công việc Spring Batch (Spring Batch 2.1.7), tôi có thể tạo các bảng được tạo bằng cách sử dụng tập lệnh có sẵn tại org/springframework/batch/core/schema-oracle10g.sql cốt lõi. Tôi cũng đặt thuộc tính batch.data.source.init thành false.Hàng loạt mùa xuân cố gắng tạo lại việc lặp lại công việc hàng loạt một lần nữa

Trên cơ sở dữ liệu sạch, chương trình theo lô của tôi chạy tốt, tạo thành công tất cả các bảng/chuỗi lô và điền chúng với các chi tiết của kết quả lô. Tuy nhiên, khi tôi chạy lại nó, Spring Batch cố gắng tạo lại các bảng này và ném "ORA-00955: tên đã được sử dụng bởi một đối tượng hiện có" ngoại lệ. Tôi đang làm gì sai?

# 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 

Sau đây là tập tin bối cảnh của tôi:

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

hãy thêm cấu hình xml nơi bạn sử dụng trình giữ chỗ –

+0

Xin chào Michael, đã chỉnh sửa câu hỏi của tôi để thêm cấu hình XML. – dchucks

Trả lời

4

tôi không thấy việc sử dụng các batch.data.source.init như thế này:

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

Cảm ơn Michael, tôi đã thử gỡ bỏ điều này khỏi XML của tôi nhưng nó không hoạt động trước đó, bây giờ nó hoạt động. Ngoài ra, với thuộc tính "đã bật" được đặt thành false như bạn đã đề xuất. Tôi không chắc chắn tại sao batch.data.source.init không hoạt động. – dchucks

+0

Và có thể là Michael Tôi có thể thu hút bạn trả lời thêm một câu hỏi mới lạ về Spring Batch. Chúng ta có thể tạo một công việc mới (Lên lịch công việc) hay xóa một công việc hiện có thông qua Quản trị hàng loạt Spring (Tôi thấy hướng dẫn nói về việc tải lên XML để thêm công việc nhưng có vẻ tẻ nhạt, nếu có một lý do tại sao API chúng tôi có thể tạo một công việc khi đang di chuyển qua Giao diện người dùng web quản trị viên hàng loạt)? – dchucks

+0

hãy thêm câu hỏi này làm câu hỏi mới để những người khác cũng có thể tìm thấy :-) cho bản thân tôi có thể nói - tôi không biết quản trị hàng loạt mùa xuân đủ tốt –

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

Nếu tôi vượt qua đối số Dòng lệnh -Dbatch.data.source.init = false, thì việc intialization không được kích hoạt.

Nhưng Nếu tôi sử dụng cấu hình bên dưới và thiết lập kích hoạt false trong xml bối cảnh, sau đó khởi động được kích hoạt mặc dù kích hoạt lá cờ là sai

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

3

Nó được một lúc nhưng tôi nghĩ rằng cho những người đang tìm kiếm sự cố này sẽ giúp bạn biết rằng bạn có thể vô hiệu hóa việc tạo cơ sở dữ liệu bằng cách sử dụng

spring.batch.initializer.enabled=false 

trong application.properties như được cung cấp trong t tài liệu của anh ấy: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

+0

Cảm ơn vì điều này.Đã xảy ra sự cố khi khởi chạy ứng dụng bị lỗi khi không thể thực hiện GIAO DỊCH SET ngay cả khi tôi không có mã DB. Hóa ra là vì các kịch bản lệnh sql mặc định – canadiancreed

Các vấn đề liên quan