2015-10-21 23 views
8

Tôi vừa tạo một công việc hàng loạt bằng cách sử dụng khung công tác Spring Batch, nhưng tôi không có đặc quyền cơ sở dữ liệu để chạy CREATE SQL. Khi tôi cố gắng chạy công việc hàng loạt, tôi đã gặp lỗi trong khi khung công tác đã cố tạo TABLE_BATCH_INSTANCE. Tôi cố gắng để vô hiệu hóa cácSpring Batch Framework - Tự động tạo Batch Table

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

Nhưng sau khi tôi đã cố gắng tôi vẫn nhấn lỗi

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist 

Dù sao có thể vô hiệu hóa các lệnh SQL, tôi chỉ muốn thử nghiệm nhà văn đọc của tôi và công việc xử lý đúng cách.

Trả lời

4

Spring Batch sử dụng cơ sở dữ liệu để lưu siêu dữ liệu cho chức năng khôi phục/thử lại của nó.

Nếu bạn không thể tạo các bảng trong cơ sở dữ liệu sau đó you have to disable this behaviour

Nếu bạn có thể tạo các bảng siêu dữ liệu hàng loạt nhưng không phải trong thời gian chạy thì bạn có thể create them manually

+0

sử dụng MapJobRepositoryFactoryBean và ResourcelessTransactionManager vô hiệu hóa SQL nhờ –

+0

Sergio, chỉ là một câu hỏi đơn giản, tôi có thể xóa/tránh tạo các bảng đó không? Tôi chỉ sử dụng lô mùa xuân để lấy dữ liệu từ một bảng từ DB – Sushi

+0

Sushi, đó là những gì đầu tiên của các tùy chọn mà tôi liệt kê ("Nếu bạn không thể tạo các bảng trong cơ sở dữ liệu thì ...") – Sergio

0

Thẻ <jdbc:initialize-database/> được phân tích cú pháp theo Mùa xuân bằng cách sử dụng InitializeDatabaseBeanDefinitionParser. Bạn có thể thử gỡ lỗi lớp này trong IDE của bạn để đảm bảo giá trị nào đang được chọn cho thuộc tính enabled. Ngoài ra giá trị này có thể được vô hiệu hóa bằng cách sử dụng tham số JVM -Dspring.batch.initializer.enabled=false

+0

Đối với SQL CREATE, nó không hiển thị lỗi vì vậy tôi cho rằng nó bị tắt. Chỉ khi tôi chạy lại lệnh batch nó nhắc tôi lỗi SQL một lần nữa nhưng vòng thời gian này liên quan đến SELECT SQL. –

+0

Thử chạy "SELECT JOB_INSTANCE_ID, JOB_NAME từ BATCH_JOB_INSTANCE nơi JOB_NAME = xxx và JOB_KEY = xxx" từ trình khách cơ sở dữ liệu với thông tin xác thực bạn đang sử dụng cho cấu hình nguồn dữ liệu Spring Batch và xem bạn có bất kỳ sự cố truy cập nào không. – Shailendra

0
<?xml version="1.0" encoding="UTF-8"?> 
<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"> 


    <!-- 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/springbatch" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
    </bean> 

    <!-- transaction manager --> 
    <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> 
</beans> 

Và chắc chắn rằng bạn đang sử dụng tương thích spring-jdbc -version với spring-batch. Hầu hết có lẽ là spring-jdbc-3.2.2.RELEASE.JAR tương thích.

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