인프런 커뮤니티 질문&답변

PrivilegeEscalate님의 프로필 이미지

작성한 질문수

[스프링 배치 입문] 예제로 배우는 핵심 Spring Batch

배치 작업 실행 하기 (스프링 스케줄링)

Spring Batch 테이블이 생성되질 않습니다!!!!!

해결된 질문

작성

·

1.2K

0

안녕하세요 강사님. 우선 강의 잘 들었다고 말씀드리고싶습니다.

다름이 아니라, 프로젝트에 스프링 배치를 적용시켜보려합니다.

아.. 근데 애플리케이션을 실행하면 기본으로 생성되는 배치 테이블이 생성되질 않습니다. (로컬에서는 h2 사용중입니다.)

 

현재로서는 임시방편으로 BatchProperties 에 나와있는대로 schema-h2.sql 내용을 복사해서 애플리케이션 구동 후, sql console 에 붙여넣기하여 배치 테이블을 직접 만들어주고있습니다. (이렇게 하면 배치랑 스케줄링이 정상적으로 잘 동작합니다.)

현재 yml 은 아래와 같습니다. profile 에 따라 yml 을 분리시켜주었긴 했는데, 포맷은 똑같습니다!

(defer-datasource-initialization 와 sql-init-mode 과 관련있나해서 이것도 바꿔보았는데.. 되질 않습니다ㅠㅠ)

spring:
  profiles:
    active: local

  jpa:
    open-in-view: false
    hibernate:
      ddl-auto: create
    defer-datasource-initialization: true
    properties:
      hibernate:
        format_sql: true
        default_batch_fetch_size: 100

  data:
    web:
      pageable:
        one-indexed-parameters: true

  datasource:
    url: jdbc:h2:tcp://localhost/~/apartribe;MODE=MySQL
    username: sa
    password:
    driver-class-name: org.h2.Driver

  sql:
    init:
      mode: always

  mail:
    host: smtp.gmail.com
    port: 587
    username: EMAIL
    password: PASSWORD
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
          ssl:
            trust: "*"

  security:
    oauth2:
      client:
        registration:
          kakao:
            client-name: KOAuth2LoginDemo
            client-id: KAKAO_CLINET_ID
            client-secret: KAKAO_CLINET_SECRET
            client-authentication-method: client_secret_post
            redirect-uri: http://localhost:8080/login/oauth2/code/kakao
            authorization-grant-type: authorization_code
            scope: profile_nickname, profile_image, account_email, age_range, birthyear

        provider:
          kakao:
            authorization-uri: https://kauth.kakao.com/oauth/authorize
            token-uri: https://kauth.kakao.com/oauth/token
            user-info-uri: https://kapi.kakao.com/v1/oidc/userinfo
            user-name-attribute: sub

  batch:
    jdbc:
      initialize-schema: always
    job:
      enabled: false

application:
  security:
    jwt:
      secret-key: ACCESS_TOKEN_SECRET_KEY
      expiration: ACCESS_TOKEN_EXPIRATION
      refresh-token:
        secret-key: REFRESH_TOKEN_SECRET_KEY
        expiration: REFRESH_TOKEN_EXPIRATION
  mail:
    subject: MAIL_SUBJECT

logging:
  level:
    sql: debug

cloud:
  aws:
    s3:
      bucket: AWS_BUCKET_NAME
    credentials:
      access-key: AWS_ACCESS_KEY
      secret-key: AWS_SECRET_KEY
    region:
      static: ap-northeast-2
      auto: false
    stack:
      auto: false

server:
  error:
    whitelabel:
      enabled: false
    include-exception: false
    include-message: never
    include-stacktrace: never
    include-binding-errors: never

 

프로젝트 주소는 아래와 같습니다.

https://github.com/Revi1337/apartribe-backend

 

Batch 와 Scheduling 설정의 위치는 아래와 같습니다

src/main/java/kr/apartribebackend/global/config/BatchConfig.java

src/main/java/kr/apartribebackend/global/config/SchedulingConfig.java

 

조언좀 부탁드리겠습니다 선생님..ㅠㅠ

 

답변 2

1

MJ코딩님의 프로필 이미지
MJ코딩
지식공유자

안녕하세요. PrivilegeEscalate님 안녕하세요 :)
답변이 늦어져서 죄송합니다 😢
@EnableBatchProcessing 어노테이션 추가를 부탁드려보겠습니다😀
예시는 아래 URL 코드를 확인해주세요!
감사합니다.

[0]
https://github.com/junngo/spring-batch-tutorial/blob/3a4a1e85ad17e87acb56e5037bf1cdfe31920987/src/main/java/com/example/SpringBatchTutorial/SpringBatchTutorialApplication.java#L7

저도 답변이 늦었습니다 죄송합니다.

우선 @EnableBatchProcessing 과 @Job, @Step 설정을 분리하였더니 정상적으로 잘 동작합니다. @EnableBatchProcessing 와 @Job, @Step 를 하나의 파일에 작성했던것이 문제였나봅니다. 감사합니다 강사님!

0

안녕하세요 PrivilegeEscalate 님, 인프런 AI 인턴이에요.

스프링 배치 테이블이 생성되지 않는 문제에 대해 문의하셨네요. 해당 문제에 대해 몇 가지 확인해야 할 사항이 있습니다.

  1. schema-h2.sql 파일 위치 확인: BatchProperties에서 명시한 파일 경로가 정확한지 확인해주세요. 파일이 위치한 경로나 파일명에 오타가 없는지 다시 확인해보시기 바랍니다.

  2. 스프링 재시작 확인: 배치 테이블은 애플리케이션이 실행될 때 자동으로 생성됩니다. 스프링 애플리케이션을 재시작하시면서 배치 테이블의 생성 여부를 확인해주세요.

  3. 로그 확인: 애플리케이션의 로그를 확인하여 배치 관련 에러 또는 경고 메시지가 있는지 찾아보세요. 에러 또는 경고 메시지에 따라 문제의 원인을 파악할 수 있을 것입니다.

  4. H2 데이터베이스 접속 확인: H2 데이터베이스에 정상적으로 접속되는지 확인해주세요. 접속이 제대로 되지 않으면 배치 테이블이 생성되지 않을 수 있습니다. H2 데이터베이스의 URL, 사용자 이름, 비밀번호 등을 다시 한번 확인해보세요.

위의 사항을 확인하신 후에도 문제가 해결되지 않는다면, 배치 관련 설정 파일인 BatchConfig.javaSchedulingConfig.java의 내용을 확인해보시는 것도 도움이 될 수 있습니다. 불편을 드려 죄송하며, 언제든지 도움이 필요하시면 다시 문의해주세요. 감사합니다!