문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
springframework:springboot:batch [2018/07/25 18:10] kwon37xi [실행] |
springframework:springboot:batch [2021/01/15 12:43] kwon37xi [실행] |
||
---|---|---|---|
줄 6: | 줄 6: | ||
아래는 SpringBoot 에서 명령행(Command line)으로 Spring Batch Job을 실행하는 방법이다. | 아래는 SpringBoot 에서 명령행(Command line)으로 Spring Batch Job을 실행하는 방법이다. | ||
- | ===== 의존성 및 bootJar 설정(Boot 2.x 기준) | + | * [[https:// |
+ | |||
+ | ===== 의존성 및 bootJar 설정 ===== | ||
<code groovy> | <code groovy> | ||
compile(' | compile(' | ||
+ | // 2.x | ||
bootJar { | bootJar { | ||
mainClassName = " | mainClassName = " | ||
+ | } | ||
+ | |||
+ | // 1.x - 지정하지 않으면 자동으로 @SpringBootApplication 애노테이션이 붙은 클래스로 자동 지정됨. | ||
+ | bootRepackage { | ||
+ | mainClass = " | ||
} | } | ||
</ | </ | ||
줄 21: | 줄 29: | ||
* **'' | * **'' | ||
* '' | * '' | ||
- | * Program 인자로 '' | + | |
+ | * 기본적으로 '' | ||
<code java> | <code java> | ||
줄 29: | 줄 37: | ||
@SpringBootApplication | @SpringBootApplication | ||
@Import(각종기타 설정 import) | @Import(각종기타 설정 import) | ||
- | public class BatchApplication { | + | public class BatchApplication |
public static void main(String[] args) { | public static void main(String[] args) { | ||
- | | + | |
+ | System.exit(exitCode); | ||
+ | } | ||
+ | |||
+ | @Value(" | ||
+ | private String jobNames; | ||
+ | |||
+ | // 어디선가 미리 생성해둔 spring batch 용 database | ||
+ | @Autowired | ||
+ | @Override | ||
+ | public void setDataSource(@Qualifier(" | ||
+ | super.setDataSource(batchDataSource); | ||
+ | } | ||
+ | |||
+ | // spring.batch.job.names 를 지정하지 않으면 모든 Job이 실행돼 버리기 때문에 | ||
+ | // 방어차원에서 넣은 job.names validation 처리 | ||
+ | @PostConstruct | ||
+ | public void validateJobNames() { | ||
+ | log.info(" | ||
+ | if (jobNames.isEmpty() || jobNames.equals(" | ||
+ | throw new IllegalStateException(" | ||
+ | } | ||
} | } | ||
} | } | ||
</ | </ | ||
+ | > '' | ||
+ | > DataSourceTransactionManagerAutoConfiguration.DataSourceTransactionManagerConfiguration 가 작동하지 않게 된다. | ||
+ | > 따라서 항상 **애플리케이션용 DataSource에 대한 transactionManager를 항상 명시적으로 만들어주고 @Primary 설정**을 해줘야 한다. | ||
===== 예제 Batch Job Configuration ===== | ===== 예제 Batch Job Configuration ===== | ||
줄 42: | 줄 74: | ||
@Slf4j | @Slf4j | ||
@Configuration | @Configuration | ||
+ | // 아래를 통해 실행 대상 job으로 들어갔을 때만 해당 Job 설정이 수행되게 하면 불필요한 설정 부담을 줄일 수 있고 | ||
+ | // 실수로 job이 실행되는 것을 막을 수 있다. | ||
@ConditionalOnProperty(name = " | @ConditionalOnProperty(name = " | ||
public class HelloBatchConfiguration { | public class HelloBatchConfiguration { | ||
줄 83: | 줄 117: | ||
===== application.properties/ | ===== application.properties/ | ||
* '' | * '' | ||
- | * | ||
- | |||
<code yml> | <code yml> | ||
spring: | spring: | ||
줄 90: | 줄 122: | ||
job: | job: | ||
enabled: true | enabled: true | ||
+ | initialize-schema: | ||
+ | main: | ||
+ | web-application-type: | ||
</ | </ | ||
+ | * '' | ||
+ | * SpringBoot 2.x 기준, '' | ||
+ | * Spring Batch 를 integraition test 할 때 '' | ||
===== 실행 ===== | ===== 실행 ===== | ||
'' | '' | ||
줄 104: | 줄 141: | ||
**'' | **'' | ||
+ | **'' | ||
+ | ===== 완전 auto configuration ===== | ||
+ | * 완전히 AutoConfig 로 SpringBoot batch 를 설정할 때 '' | ||
+ | |||
+ | ==== spring-boot-starter-batch-web ==== | ||
+ | * [[https:// | ||
+ | * SpringBoot Web으로 batch Job 실행. | ||
+ | |||
+ | |||
+ | ===== 참고 ===== | ||
+ | * [[https:// | ||
+ | |||
+ |