Skip to content

Commit 4aa9365

Browse files
author
jemin
committed
refactor: 스케쥴러, Async 리팩토링
1 parent 9d324ff commit 4aa9365

File tree

12 files changed

+105
-126
lines changed

12 files changed

+105
-126
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dependencies {
3838

3939
// Querydsl
4040
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
41-
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
41+
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
4242
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
4343
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
4444

src/main/generated/com/backend/detailgoal/domain/QDetailGoal.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class QDetailGoal extends EntityPathBase<DetailGoal> {
2222

2323
public final com.backend.global.entity.QBaseEntity _super = new com.backend.global.entity.QBaseEntity(this);
2424

25-
public final SetPath<java.time.DayOfWeek, EnumPath<java.time.DayOfWeek>> alarmDays = this.<java.time.DayOfWeek, EnumPath<java.time.DayOfWeek>>createSet("alarmDays", java.time.DayOfWeek.class, EnumPath.class, PathInits.DIRECT2);
25+
public final ListPath<java.time.DayOfWeek, EnumPath<java.time.DayOfWeek>> alarmDays = this.<java.time.DayOfWeek, EnumPath<java.time.DayOfWeek>>createList("alarmDays", java.time.DayOfWeek.class, EnumPath.class, PathInits.DIRECT2);
2626

2727
public final BooleanPath alarmEnabled = createBoolean("alarmEnabled");
2828

src/main/java/com/backend/detailgoal/domain/repository/DetailGoalQueryRepository.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.backend.detailgoal.domain.repository;
22

33
import com.backend.detailgoal.application.dto.response.DetailGoalAlarmResponse;
4-
import com.backend.goal.domain.QGoal;
54
import com.backend.goal.domain.enums.GoalStatus;
6-
import com.backend.member.domain.QMember;
75
import com.querydsl.core.types.Projections;
86
import com.querydsl.jpa.impl.JPAQueryFactory;
97
import lombok.RequiredArgsConstructor;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.backend.global.config;
2+
3+
import java.util.concurrent.Executor;
4+
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.scheduling.annotation.AsyncConfigurer;
7+
import org.springframework.scheduling.annotation.EnableAsync;
8+
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
9+
10+
@EnableAsync
11+
@Configuration
12+
public class AsyncConfig implements AsyncConfigurer {
13+
14+
/*
15+
@Async를 사용할때 ThreadPoolTaskExecutor를 설정하지 않으면 쓰레드 1개로 동작합니다.
16+
따라서 쓰레드 풀을 할당해서 멀티 쓰레드로 동작하도록 만들었습니다.
17+
executor.setPrestartAllCoreThreads(false)로 설정해서 초반에 요청이 들어올때마다 CorePoolSize까지 쓰레드 개수를 늘리도록 만들었습니다.
18+
*/
19+
@Override
20+
public Executor getAsyncExecutor() {
21+
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
22+
executor.setCorePoolSize(10);
23+
executor.setMaxPoolSize(10);
24+
executor.setQueueCapacity(1000);
25+
executor.setWaitForTasksToCompleteOnShutdown(true);
26+
executor.initialize();
27+
return executor;
28+
}
29+
}

src/main/java/com/backend/global/config/AysncConfig.java

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/main/java/com/backend/global/config/SchedulerConfig.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,25 @@
1010

1111
@Configuration
1212
@EnableScheduling
13-
@EnableSchedulerLock(defaultLockAtLeastFor = "10s", defaultLockAtMostFor = "10s")
13+
@EnableSchedulerLock(defaultLockAtLeastFor = "5s", defaultLockAtMostFor = "5s")
1414
public class SchedulerConfig implements SchedulingConfigurer {
1515

16+
private static final String SCHEDULER_THREAD_POOL_NAME = "scheduler thread pool";
17+
private static final String THREAD_NAME_PREFIX = "scheduler-thread-";
18+
private static final int POOL_SIZE = 3;
19+
20+
/*
21+
쓰레드풀 사이즈를 선정할때는 필요 이상으로 크게 할당하는걸 경계해야 합니다.
22+
서비스에 쓰레드 개수가 늘어나는건 쓰레드 간 경합을 증가시켜서 컨텍스트 스위칭 비용을 증가시킵니다.
23+
따라서 현재 서비스에 스케쥴러가 2개만 존재하고 스케쥴링 간격이 긴 만큼 여유분 1개를 추가해서 총 3개의 쓰레드를 할당했습니다.
24+
*/
1625
@Override
1726
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
1827
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
1928

20-
threadPoolTaskScheduler.setPoolSize(3);
21-
threadPoolTaskScheduler.setThreadGroupName("scheduler thread pool");
22-
threadPoolTaskScheduler.setThreadNamePrefix("scheduler-thread-");
29+
threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
30+
threadPoolTaskScheduler.setThreadGroupName(SCHEDULER_THREAD_POOL_NAME);
31+
threadPoolTaskScheduler.setThreadNamePrefix(THREAD_NAME_PREFIX);
2332
threadPoolTaskScheduler.initialize();
2433

2534
taskRegistrar.setTaskScheduler(threadPoolTaskScheduler);

src/main/java/com/backend/global/event/AlarmEventHandler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import com.backend.detailgoal.domain.event.AlarmEvent;
55
import com.backend.infrastructure.fcm.FcmService;
66
import lombok.RequiredArgsConstructor;
7+
8+
import org.springframework.context.event.EventListener;
9+
import org.springframework.scheduling.annotation.Async;
710
import org.springframework.stereotype.Component;
811
import org.springframework.transaction.event.TransactionPhase;
912
import org.springframework.transaction.event.TransactionalEventListener;
@@ -15,10 +18,9 @@ public class AlarmEventHandler {
1518

1619
private final FcmService fcmService;
1720

18-
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
21+
@Async
22+
@EventListener
1923
public void sendAlarm(AlarmEvent event) {
20-
2124
fcmService.sendMessage(event.uid(), event.detailGoalTitle());
2225
}
23-
2426
}

src/main/java/com/backend/global/event/GoalEventHandler.java

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/main/java/com/backend/global/event/ReminderEventHandler.java

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.backend.global.scheduler;
2+
3+
public abstract class SchedulerConstant {
4+
5+
public static final String OUTDATED_GOAL_LOCK = "outdated_goal_lock";
6+
public static final String SEND_ALARM_LOCK = "send_alarm_lock";
7+
public static final String LOCAL_TIME_ZONE = "Asia/Seoul";
8+
}

0 commit comments

Comments
 (0)