2015-10-21 3 views
8

Я только что создал пакетное задание с использованием Spring Batch framework, но у меня нет привилегий базы данных для запуска CREATE SQL. Когда я пытаюсь запустить пакетное задание, я нахожу ошибку, пока среда пытается создать TABLE_BATCH_INSTANCE. Я пытаюсь отключитьSpring Batch Framework - Автоматическое создание пакетного стола

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

Но после того, как я попытался я еще ударил ошибку

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 

Во всяком случае можно отключить SQL, я просто хочу, чтобы проверить мой читатель писатель и процессор работать должным образом.

ответ

4

Spring Batch использует базу данных для сохранения метаданных для ее функций восстановления/повтора.

Если вы не можете создавать таблицы в базе данных, то you have to disable this behaviour

Если вы можете создать таблицы метаданных партии, но не во время выполнения, то вы можете create them manually

+0

Использование MapJobRepositoryFactoryBean и ResourcelessTransactionManager отключил SQL благодаря –

+0

Sergio, простой вопрос, могу ли я удалить/избежать создания этих таблиц? Я просто использую весеннюю партию для получения данных из таблицы из DB – Sushi

+0

Суши, вот что сделал первый из перечисленных мной вариантов («Если вы не можете создавать таблицы в базе данных, то ...») – Sergio

0

<jdbc:initialize-database/> тег анализируется весной, используя InitializeDatabaseBeanDefinitionParser. Вы можете попробовать отладить этот класс в своей среде IDE, чтобы удостовериться, какие значения подбираются для атрибута enabled. Также это значение можно отключить, используя параметр JVM. -Dspring.batch.initializer.enabled=false

+0

Для CREATE SQL он не отображает ошибку, поэтому я предположил, что она отключена. Просто, когда я снова запускаю пакетное задание, он снова вызывает ошибку SQL, но этот временной интервал связан с SELECT SQL. –

+0

Попробуйте запустить «SELECT JOB_INSTANCE_ID, JOB_NAME из BATCH_JOB_INSTANCE, где JOB_NAME = xxx и JOB_KEY = xxx» из клиента базы данных с учетными данными, которые вы используете для конфигурации источника данных Spring Batch, и посмотрите, есть ли у вас проблемы с доступом. – 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> 

И убедитесь, что вы используете совместимый spring-jdbc -версия с весенняя партия. Скорее всего Весна-jdbc-3.2.2.RELEASE.JAR Совместимость.

2

С весны Ботинок 2.0 Вы, вероятно, нужно это: https://docs.spring.io/spring-boot/docs/2.0.0.M7/reference/htmlsingle/#howto-initialize-a-spring-batch-database

spring.batch.initialize-schema=always 

По умолчанию это будет только создавать таблицы, если вы используете встроенную базу данных.

Или

spring.batch.initialize-schema=never 

Чтобы окончательно вывести его из строя.

Смежные вопросы