백그라운드 워커는 사용자와의 상호 작용없이 단독으로 돌아가는 작업입니다. 일반적으로 주기적 실행되는 반복 작업을 수행합니다.
주기적으로 실행하여 오래된 로그 파일를 삭제할 수 있습니다.
주기적으로 실행하여 잠김 처리된 사용자를 식별하고 관리자에게 알림을 보내 처리할 수 있습니다.
타 시스템과의 연동을 위해 특정 시간에 데이터를 가져오거나, 내보내는 작업을 진행할 수 있습니다.
아래 샘플 코드로 사용할 수 있습니다.
public class SampleBackgroundWorker : PeriodicBackgroundWorkerBase, ITransient
{
/// <summary>
/// <see cref="SampleBackgroundWorker"/> 클래스의 새 인스턴스를 초기화합니다.
/// </summary>
/// <param name="timer">A timer.</param>
public SampleBackgroundWorker(AxsTimer timer) : base(timer)
{
// 1초 후에 DoWork가 시작 되도록 세팅
Timer.Period = 1000 * 1;
}
/// <summary>
/// 이 메서드를 구현하여 주기적인 작업을 수행해야 합니다.
/// </summary>
[UnitOfWork]
protected override void DoWork()
{
// 모든 테넌트 데이터에 접근이 되도록 필터를 해제 한다.
using (CurrentUnitOfWork.DisableFilter(AxsDataFilters.MayHaveTenant)) {
// DB 작업 또는 배치 작업 진행
if (IsRunning) {
// Worker 중지 요청을 받지 안았다면 실행
// 업무 로직을 실행 하도록 한다.
Logger.Info("SampleBackgroundWorker 실행 됨");
}
}
// 일정 시간이 되었을 때 외부 연동 작업 진행
Timer.Period = 1000 * 1;
}
}
위 워커가 동작하기 위해서는 아래 코드와 같이 모듈에서 등록을 해줘야 합니다.
public override void PostInitialize()
{
// Worker를 등록해서 동작하도록 한다.
var workManager = IocManager.Resolve<IBackgroundWorkerManager>();
workManager.Add(IocManager.Resolve<SampleBackgroundWorker>());
}