복붙노트

[SPRING] Spring Batch Framework - 배치 테이블 자동 생성

SPRING

Spring Batch Framework - 배치 테이블 자동 생성

Spring Batch 프레임 워크를 사용하여 배치 작업을 만들었지 만 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을 비활성화 할 수 있습니다. 필자는 독자 작가와 프로세서가 제대로 작동하는지 테스트하고 싶습니다.

해결법

  1. ==============================

    1.Spring Batch는 데이터베이스를 사용하여 복구 / 재시도 기능을 위해 메타 데이터를 저장합니다.

    Spring Batch는 데이터베이스를 사용하여 복구 / 재시도 기능을 위해 메타 데이터를 저장합니다.

    데이터베이스에 테이블을 만들 수없는 경우이 동작을 비활성화해야합니다.

    일괄 메타 데이터 테이블을 만들 수 있지만 런타임에 만들 수없는 경우 수동으로 만들 수 있습니다.

  2. ==============================

    2.스프링 부트 2.0을 사용하면 다음과 같이 필요할 수 있습니다. https://docs.spring.io/spring-boot/docs/2.0.0.M7/reference/htmlsingle/#howto-initialize-a-spring-batch-database

    스프링 부트 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
    

    영구적으로 비활성화하려면.

  3. ==============================

    3.스프링 배치 데이터 스키마 자동 생성을 사용하려면 다음 행을 spring application.properties 파일에 추가하기 만하면됩니다.

    스프링 배치 데이터 스키마 자동 생성을 사용하려면 다음 행을 spring application.properties 파일에 추가하기 만하면됩니다.

    spring.batch.initialize-schema = 항상

    스프링 배치 메타 데이터 스키마에 대해 더 자세히 이해하려면 다음을 수행하십시오.

    https://docs.spring.io/spring-batch/trunk/reference/html/metaDataSchema.html

  4. ==============================

    4.어리석은 것처럼 보이지만 누군가가 똑같은 문제를 겪을 수 있습니다.

    어리석은 것처럼 보이지만 누군가가 똑같은 문제를 겪을 수 있습니다.

    데이터베이스에서 모든 테이블을 삭제 한 후에이 오류가 발생했습니다. 스프링 배치를 시작하려 할 때 오류가 발생했습니다.

    과:

    서비스를 다시 시작하지 않고 테이블을 삭제하기 때문에 이런 일이 일어났습니다. 서비스가 시작되었고 데이터베이스의 배치 테이블을 사용하여 데이터베이스 메타 데이터를받습니다. 서버를 삭제하고 서버를 다시 시작하지 않으면 Spring Batch는 테이블이 여전히 존재한다고 생각합니다.

    Spring Batch 서버를 재시작하고 배치를 다시 실행 한 후에 테이블은 오류없이 작성되었습니다.

  5. ==============================

    5. 태그는 InitializeDatabaseBeanDefinitionParser를 사용하여 Spring에 의해 파싱됩니다. IDE에서이 클래스를 디버깅하여 활성화 된 속성에 대해 어떤 값이 선택되었는지 확인할 수 있습니다. 또한이 값은 JVM 매개 변수를 사용하여 비활성화 할 수 있습니다. -Dspring.batch.initializer.enabled = false

    태그는 InitializeDatabaseBeanDefinitionParser를 사용하여 Spring에 의해 파싱됩니다. IDE에서이 클래스를 디버깅하여 활성화 된 속성에 대해 어떤 값이 선택되었는지 확인할 수 있습니다. 또한이 값은 JVM 매개 변수를 사용하여 비활성화 할 수 있습니다. -Dspring.batch.initializer.enabled = false

  6. ==============================

    6.

    <?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 -version을 사용하고 있는지 확인하십시오. 아마 spring-jdbc-3.2.2.RELEASE.JAR 호환 가능.

  7. ==============================

    7.이것은 나를 위해 작동합니다 : Spring boot 2.0

    이것은 나를 위해 작동합니다 : Spring boot 2.0

      batch:
            initialize-schema: never
            initializer:
                enabled: false
    
  8. ==============================

    8.스프링 부트로 실행할 때 :

    스프링 부트로 실행할 때 :

    스프링 부트 v1.5.14.RELEASE, 스프링 v4.3.18.RELEASE로 실행

    이 정도면 충분합니다.

    spring:
        batch:
            initializer:
                enabled: false
    

    이 스프링 부트 버전에서는 initialize-schema가 작동하지 않았습니다. 그 후 저는 스프링 코어 항아리에서 SQL 스크립트를 복사하고 테이블 대문자를 바꿀 수있었습니다. 이것은 Windows / Mac / Linux에서 자동 테이블 생성을 할 때의 내 문제 였기 때문입니다.

  9. from https://stackoverflow.com/questions/33249942/spring-batch-framework-auto-create-batch-table by cc-by-sa and MIT license