본문 바로가기
개발/Spring

[Spring] xxl-job-admin으로 스프링 배치 스케쥴러 관리 2

by onethejay 2022. 6. 3.
728x90

xxl-job-admin에서 관리할 수 있는 프로젝트를 생성하고 Executor로 등록까지 진행해보겠습니다.

Executor 프로젝트 생성

의존성은 web만 추가하여 Springboot 프로젝트를 생성합니다.

빌드가 완료되면 build.gradle의 dependencies에 xxl-job-core를 추가합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.xuxueli:xxl-job-core:2.3.1'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

application.properties에 아래 내용을 추가합니다.

# web port
server.port=8081
# no web
#spring.main.web-environment=false

# log config
logging.config=classpath:logback.xml

### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### xxl-job, access token
xxl.job.accessToken=

### xxl-job executor appname
xxl.job.executor.appname=xxl-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30

resources 폴더 아래에 logback.xml 파일을 생성하고 아래 내용을 추가합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">

    <contextName>logback</contextName>
    <property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

</configuration>

XxlJobConfig 생성

logback 파일까지 생성했다면 이제 XxlJobConfig.java를 생성하고 Bean을 등록해야 합니다.

먼저 config 패키지 안에 XxlJobConfig.java 파일을 만들어줍니다.

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * xxl-job config
 *
 * @author xuxueli 2017-04-28
 */
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.appname}")
    private String appname;

    @Value("${xxl.job.executor.address}")
    private String address;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}

서버를 시작해보고 정상적으로 시작되는지 확인합니다.

어드민에 Executor 등록

Executor가 정상적으로 시작되었다면 어드민에 등록해보겠습니다.

어드민에 접속 후 Executor 관리 화면에서 추가 버튼을 누르고 Executor 정보를 작성 후 저장합니다.

Executor에 Job 등록

이어서 Executor에 Job을 등록하고 호출해보겠습니다.

Job 관리 화면에서 추가 버튼을 클릭합니다. 아래처럼 내용을 입력합니다.

Cron의 수정 버튼을 클릭하고 매 30초마다 해당 Job을 호출할 수 있게 선택합니다.
(기존 Scheduler 어노테이션의 Cron을 직접 입력할수도 있습니다.)

선택 또는 입력 후 현재 Job을 저장합니다.

Job의 액션 오른쪽의 버튼을 클릭하면 나타나는 버튼 중 한번만 실행을 클릭합니다.

다른 추가 입력 없이 저장 버튼을 클릭하여 실행합니다.

다시 액션의 호출 로그를 눌러서 로그를 확인해봅니다.

Executor에 sampleJobHandler를 생성하지 않아 500 에러가 발생했습니다.

다음 포스팅에서 sampleJobHandler를 생성하고 호출까지 진행해보겠습니다.

728x90

댓글