Spring Batch Framework - автоматическое создание таблицы пакетов
Я только что создал пакетное задание с помощью Spring Batch framework, но у меня нет прав базы данных для запуска CREATE SQL. Когда я пытаюсь запустить пакетное задание, я попал в ошибку, когда платформа пыталась создать TABLE_BATCH_INSTANCE. Я пытаюсь отключить
<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, я просто хочу проверить правильность работы моего читателя и процессора.
6 ответов
Spring Batch использует базу данных для сохранения метаданных для функции восстановления/повторной попытки.
Если вы не можете создать таблицы в базе данных вы должны отключить это поведение
Если вы можете создать таблицы метаданных пакета, но не во время выполнения, вы можете создать их вручную
С Spring Boot 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
полностью отключить его.
кажется глупым, но у кого-то может быть такая же проблема.
Я получал эту ошибку после удаления всех таблиц из базы данных. Когда я попытался запустить весеннюю партию, я получил сообщение об ошибке:
плохая грамматика SQL [выберите JOB_INSTANCE_ID, JOB_NAME из BATCH_JOB_INSTANCE, где JOB_NAME = ? и JOB_KEY = ?]
и:
недопустимое имя объекта 'BATCH_JOB_INSTANCE'
Это случилось со мной, потому что Я!--15-->отбросьте таблицы без перезапуска службы. Служба запущена и получает метаданные базы данных С пакетные таблицы в базе данных. После их удаления и не перезагрузки сервера весенний пакет думал, что таблицы все еще существуют.
после перезагрузки сервера Spring Batch server и повторного выполнения пакета таблицы были созданы без ошибок.
чтобы включить автоматическое создание spring batch data-schema просто добавьте эту строку в приложение spring.файл свойств:
весна.партия.initialize-schema=всегда
чтобы узнать больше о схеме метаданных Spring batch:
https://docs.spring.io/spring-batch/trunk/reference/html/metaDataSchema.html
<jdbc:initialize-database/>
тег анализируется весной с помощью InitializeDatabaseBeanDefinitionParser
. Вы можете попробовать отладить этот класс в своей IDE, чтобы убедиться, какие значения подбираются для . Также это значение можно отключить с помощью параметра JVM -Dspring.batch.initializer.enabled=false
<?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>
и убедитесь, что вы используете совместимое весна-jdbc -версия с весна-пакета. Скорее всего весна-jdbc-3.2.2.ОСВОБОЖДАТЬ.Джар совместимость.