
Java 라이브러리로, 크론 표현식을 파싱, 검증, 마이그레이션 및 설명하며 여러 형식(Unix, Quartz, Spring)을 지원하고 사람이 읽을 수 있는 로케일별 출력을 제공합니다.
우리는 크론을 정의합니다. 그리고 그것들을 지원합니다.
cron-utils는 크론을 정의, 파싱, 검증, 마이그레이션하고 사람이 읽을 수 있는 설명을 제공하는 Java 라이브러리입니다. 이 프로젝트는 시맨틱 버저닝 규약을 따르며, OSGi 메타데이터를 제공하고 Apache 2.0 라이선스를 사용합니다.
다운로드
cron-utils는 Maven 중앙 저장소에서 사용할 수 있습니다.
<dependency>
<groupId>com.cronutils</groupId>
<artifactId>cron-utils</artifactId>
<version>9.2.1</version>
</dependency>
Android 개발자의 경우 cron-utils 7.0.0은 Android 26+를 가정합니다. 이전 Android 버전의 경우 cron-utils 6.0.6 사용을 고려하세요. Java EE의 ScheduleExpression을 사용하는 경우 런타임 종속성으로 제공해야 합니다.
현재 개발 상황
코드베이스를 JDK 16으로 업데이트하여 JDK 17이 출시될 때 완전히 호환되도록 작업 중입니다.
이제 신경망 번역을 사용하여 새로운 차세대 cron 설명자를 개발 중입니다! 데이터셋 생성, 머신러닝 모델 훈련 및 로드 유틸리티 등 모든 종류의 기여를 환영합니다! 관심이 있으시면 #3 이슈를 참조해 주세요.
기능
사용 예제
아래에 몇 가지 예제를 제시합니다. 이것과 다른 예제는 cron-utils 라이브러리를 소개하기 위해 만든 샘플 저장소에서 찾을 수 있습니다!
cron 정의 빌드
// 나만의 cron 정의: 임의 필드 허용 및 마지막 필드 선택 가능
CronDefinition cronDefinition =
CronDefinitionBuilder.defineCron()
.withSeconds().and()
.withMinutes().and()
.withHours().and()
.withDayOfMonth()
.supportsHash().supportsL().supportsW().and()
.withMonth().and()
.withDayOfWeek()
.withIntMapping(7, 0) // 비표준 0 기반이 아닌 숫자 지원!
.supportsHash().supportsL().supportsW().and()
.withYear().optional().and()
.instance();
// 또는 사전 정의된 인스턴스 가져오기
cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(QUARTZ);
cron 표현식 빌드
// Cron 표현식 생성. CronMigrator가 cron 제공자 중립성을 유지하도록 보장합니다.
import static com.cronutils.model.field.expression.FieldExpressionFactory.*;
Cron cron = CronBuilder.cron(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ))
.withYear(always())
.withDoM(between(SpecialChar.L, 3))
.withMonth(always())
.withDoW(questionMark())
.withHour(always())
.withMinute(always())
.withSecond(on(0))
.instance();
// 문자열 표현식 얻기
String cronAsString = cron.asString(); // 0 * * L-3 * ? *
파싱
// 제공된 정의를 기반으로 파서 생성
CronParser parser = new CronParser(cronDefinition);
Cron quartzCron = parser.parse("0 23 * ? * 1-5 *");
... 심지어 다중 cron 표현식도! 여러 cron을 한 줄로 압축하는 것은 어떨까요? 0 0 9 * * ? *, 0 0 10 * * ? *, 0 30 11 * * ? * 및 0 0 12 * * ? * 대신 0 0|0|30|0 9|10|11|12 * * ? *로 감쌀 수 있습니다.
설명
// 특정 로케일에 대한 설명자 생성
CronDescriptor descriptor = CronDescriptor.instance(Locale.UK);
// 표현식 파싱 후 설명자에게 설명 요청
String description = descriptor.describe(parser.parse("*/45 * * * * ?"));
// 설명: "매 45초마다"
description = descriptor.describe(quartzCron);
// 설명: "월요일부터 금요일까지 매일 23분에 매시간"
// 아래 cron과 동일한 설명입니다:
descriptor.describe(parser.parse("0 23 * ? * MON-FRI *"));
마이그레이션
// cron 라이브러리 간 마이그레이션이 이렇게 쉬웠던 적이 없습니다!
// CronMapper를 사용하여 cron 표현식을 다른 형식으로 변환:
CronMapper cronMapper = CronMapper.fromQuartzToCron4j();
Cron cron4jCron = cronMapper.map(quartzCron);
// 문자열 표현을 얻으려면 다음을 사용할 수 있습니다.
cron4jCron.asString(); // 반환: 23 * * * 1-5
검증
cron4jCron.validate()
실행 시간 계산
// 마지막 실행 시간 구하기
ZonedDateTime now = ZonedDateTime.now();
ExecutionTime executionTime = ExecutionTime.forCron(parser.parse("* * * * * ? *"));
ZonedDateTime lastExecution = executionTime.lastExecution(now);
// 다음 실행 시간 구하기
ZonedDateTime nextExecution = executionTime.nextExecution(now);
// 마지막 실행 이후 시간
Duration timeFromLastExecution = executionTime.timeFromLastExecution(now);
// 다음 실행까지 시간
Duration timeToNextExecution = executionTime.timeToNextExecution(now);
라이브러리 간 상수 매핑
// Quartz에서 JodaTime으로 요일 값 매핑
int jodatimeDayOfWeek =
ConstantsMapper.weekDayMapping(
ConstantsMapper.QUARTZ_WEEK_DAY,
ConstantsMapper.JODATIME_WEEK_DAY
);
사람을 위한 날짜 및 시간 형식 지정!
htime 사용 - Java용 사람이 읽을 수 있는 날짜 시간 형식 지정! 이 기능은 동일한 jar에 포함되어 있지 않지만 유용할 수 있는 cron-utils 프로젝트입니다.
// 더 이상 "YYYY-MM-dd KK a" 패턴을 기억할 필요가 없습니다.
DateTimeFormatter formatter =
HDateTimeFormatBuilder
.getInstance()
.forJodaTime()
.getFormatter(Locale.US)
.forPattern("June 9, 2011");
String formattedDateTime = formatter.print(lastExecution);
// formattedDateTime은 "요일, 월 일, 년" 형식의 lastExecution이 됩니다.
cron-utils CLI
새 프로젝트를 작성하지 않고 콘솔에서 바로 cron-utils를 사용할 수 있는 간단한 CLI 인터페이스를 제공합니다! CLI는 cron-utils-cli에서 제공되는 위성 프로젝트입니다.
사용법: java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'
예제: java -jar cron-utils.jar com.cronutils.cli.CronUtilsCLI --validate -f UNIX -e '* 1 * * *'
'cp' 없이 독립 실행형 jar를 원한다면, uber jar를 빌드하세요:
mvn assembly:assembly -DdescriptorId=jar-with-dependencies
그런 다음 ( target 디렉토리에 빌드된) cli-utils을 다음과 같이 실행합니다:
java -jar cron-utils-<version>-jar-with-dependencies.jar com.cronutils.cli.CronUtilsCLI --validate -f [CRON4J|QUARTZ|UNIX] -e '<cron expression>'`
기여 및 지원!
기여를 환영합니다! 다음과 같은 방법으로 기여할 수 있습니다:
저희 페이지를 확인하세요! 프로젝트 통계는 OpenHUB 프로필에서 확인할 수 있습니다.
기타 cron-utils 프로젝트
다음 cron-utils 프로젝트를 방문하여 사용해 보시기 바랍니다: