송신(Postman) 진행중

main
semin.baek 10 months ago
parent abb3a2c332
commit 1bf5433ec6

@ -8,6 +8,8 @@ import org.springframework.stereotype.Component;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Slf4j @Slf4j
@Component @Component
@ -49,4 +51,17 @@ public class AgentConfigReader {
} }
return found; return found;
} }
public List<AgentConfigDto.Postman> getScheduledTypePostmanList() {
List<AgentConfigDto.Postman> postmanList = null;
for(AgentConfigDto.Postman postman : this.agentConfigDto.getPostman()) {
if(AgentConfigDto.ActionType.SCHEDULED == postman.getAction().getType()) {
if(postmanList == null) {
postmanList = new ArrayList<>();
}
postmanList.add(postman);
}
}
return postmanList;
}
} }

@ -21,6 +21,7 @@ import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.io.File; import java.io.File;
@ -189,15 +190,108 @@ public class DfxAgentConfiguration {
return new DataSourceTransactionManager(dataSource); return new DataSourceTransactionManager(dataSource);
} }
@Bean(name = "threadPoolTaskExecutor") @Bean(name = "dropBoxProcessorThreadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() { public Executor dropBoxProcessorThreadPoolTaskExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); ThreadPoolTaskExecutor dropBoxProcessorThreadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(30); // 최소 쓰레드 dropBoxProcessorThreadPoolTaskExecutor.setCorePoolSize(30); // 최소 쓰레드
threadPoolTaskExecutor.setMaxPoolSize(300); // 최대 쓰레드 dropBoxProcessorThreadPoolTaskExecutor.setMaxPoolSize(300); // 최대 쓰레드
threadPoolTaskExecutor.setQueueCapacity(300); // 대기 큐 dropBoxProcessorThreadPoolTaskExecutor.setQueueCapacity(300); // 대기 큐
threadPoolTaskExecutor.setThreadNamePrefix("dfxExecutor-"); dropBoxProcessorThreadPoolTaskExecutor.setThreadNamePrefix("dfxExecutor-");
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true); // 종료 시 대기 여부 dropBoxProcessorThreadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true); // 종료 시 대기 여부
threadPoolTaskExecutor.initialize(); dropBoxProcessorThreadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor; return dropBoxProcessorThreadPoolTaskExecutor;
}
@Bean(name = "scheduledPostmanThreadPoolTaskScheduler")
public ThreadPoolTaskScheduler scheduledPostmanThreadPoolTaskScheduler() {
ThreadPoolTaskScheduler scheduledPostmanThreadPoolTaskScheduler = new ThreadPoolTaskScheduler();
/**
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
public class SchedulerConfig {
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(5);
scheduler.setThreadNamePrefix("dynamic-scheduler-");
scheduler.initialize();
return scheduler;
}
}
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.concurrent.ScheduledFuture;
@Service
public class DynamicSchedulerService {
private final ThreadPoolTaskScheduler taskScheduler;
private ScheduledFuture<?> scheduledFuture;
private String currentCron = "0/10 * * * * *"; // 10초마다
public DynamicSchedulerService(ThreadPoolTaskScheduler taskScheduler) {
this.taskScheduler = taskScheduler;
}
public void startDynamicTask() {
scheduledFuture = taskScheduler.schedule(this::runTask, new CronTrigger(currentCron));
}
public void updateCron(String newCron) {
stopTask();
this.currentCron = newCron;
startDynamicTask();
}
public void stopTask() {
if (scheduledFuture != null) {
scheduledFuture.cancel(false);
}
}
private void runTask() {
System.out.println("작업 실행: " + new Date());
// 실제 작업 로직
}
}
@RestController
@RequiredArgsConstructor
public class ScheduleController {
private final DynamicSchedulerService schedulerService;
@PostMapping("/start")
public String start() {
schedulerService.startDynamicTask();
return "스케줄 시작";
}
@PostMapping("/update")
public String update(@RequestParam String cron) {
schedulerService.updateCron(cron);
return "크론 변경됨: " + cron;
}
@PostMapping("/stop")
public String stop() {
schedulerService.stopTask();
return "스케줄 정지됨";
}
}
*/
return scheduledPostmanThreadPoolTaskScheduler;
} }
} }

@ -9,6 +9,7 @@ import com.bsmlab.dfx.agent.task.dropbox.DropBoxService;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import io.micrometer.common.util.StringUtils; import io.micrometer.common.util.StringUtils;
import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.EnumUtils; import org.apache.commons.lang3.EnumUtils;
@ -33,8 +34,15 @@ public class TaskExecutorService {
private final AgentConfigReader agentConfigReader; private final AgentConfigReader agentConfigReader;
private final SqlExecuteService sqlExecuteService; private final SqlExecuteService sqlExecuteService;
private final DropBoxService dropBoxService; private final DropBoxService dropBoxService;
@Getter
private List<AgentConfigDto.Postman> scheduledTypePostmanList;
@Async("threadPoolTaskExecutor") /**
*
* DB +
* @param messageFilePath
*/
@Async("dropBoxProcessorThreadPoolTaskExecutor")
public void processDropBox(String messageFilePath) { public void processDropBox(String messageFilePath) {
ReceiveMessageDto receiveMessageDto = ReceiveMessageDto.builder().build(); ReceiveMessageDto receiveMessageDto = ReceiveMessageDto.builder().build();
ReceiveMessageDto.ProcessStatus processStatus = null; ReceiveMessageDto.ProcessStatus processStatus = null;
@ -121,8 +129,9 @@ public class TaskExecutorService {
} }
} }
@Async("threadPoolTaskExecutor") //@Async("threadPoolTaskExecutor")
public void processPostman() { public void processPostman(AgentConfigDto.Postman postman) {
} }

@ -1,5 +1,7 @@
package com.bsmlab.dfx.agent.task; package com.bsmlab.dfx.agent.task;
import com.bsmlab.dfx.agent.config.AgentConfigDto;
import com.bsmlab.dfx.agent.config.AgentConfigReader;
import com.bsmlab.dfx.agent.task.dropbox.DropBoxService; import com.bsmlab.dfx.agent.task.dropbox.DropBoxService;
import io.micrometer.common.util.StringUtils; import io.micrometer.common.util.StringUtils;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
@ -7,15 +9,23 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class TaskExecutorStarter { public class TaskExecutorStarter {
private final AgentConfigReader agentConfigReader;
private final DropBoxService dropBoxService; private final DropBoxService dropBoxService;
private final TaskExecutorService taskExecutorService; private final TaskExecutorService taskExecutorService;
@PostConstruct @PostConstruct
public void run() { public void run() {
List<AgentConfigDto.Postman> scheduledPostmanList = agentConfigReader.getScheduledTypePostmanList();
for(AgentConfigDto.Postman postman : scheduledPostmanList) {
taskExecutorService.processPostman(postman);
}
while(true) { while(true) {
try { try {
Thread.sleep(10); Thread.sleep(10);

Loading…
Cancel
Save