Я использую TaskExecutor
для запуска некоторых задач в фоновых потоках. Вот моя конфигурация: -
@Configuration
public class TaskExecutorConfig
{
@Bean
public TaskExecutor threadPoolTaskExecutor()
{
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(4);
threadPoolTaskExecutor.setMaxPoolSize(100);
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(false);
threadPoolTaskExecutor.setThreadNamePrefix("TaskExecutor");
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}
}
В фоновом режиме может выполняться много задач. Я объявил ThreadComponent
реализующий Runnable
класс. В этом ThreadComponent
я объявил методы, которые выполняются в зависимости от условия. Ниже приведен компонент и его внешний вид: -
public class ThreadComponent implements Runnable
{
....
....
....
....
public ThreadComponent()
{
//................//
//Initialization code for variables and some autowired components//
//................//
}
@Override
public void run()
{
if (condition)
doThis();
else if (condition)
doThat();
else if (condition)
doThen();
else if (condition)
doWhere();
else if (condition)
doHow();
else if (condition)
doWhen();
else if (condition)
doNothing();
}
public void doThis() {
......
.....,
}
public void doThat() {
......
.....,
}
public void doThen() {
......
.....,
}
public void doWhere() {
......
.....,
}
public void doHow() {
......
.....,
}
public void doWhen() {
......
.....,
}
public void doNothing() {
......
.....,
}
}
Я называю этот компонент, используя TaskExecutor
для задач. В ThreadComponent
я также использовал @Autowired
компоненты, которые я инициализирую в конструкторе, используя ApplicationContext
. Но это замедляет мою обработку. Мне нужна помощь, чтобы я мог оптимизировать свой код, чтобы он стал лучше.
Обновление
Найдите переменные класса и конструктор компонента:
private DTO dto1;
private DTO2 dto2;
private Map<String, Object> dtoVal;
private String schemaName;
private int checkCondition;
private AppUser user;
private Details oldApprovalDetails;
private Details newApprovalDetails;
private ThreadDTO threadDTO;
@Autowired
OcrService ocrService;
@Autowired
NotificationService notificationService;
@Autowired
CreateRecordsService createRecordService;
@Autowired
DtoService dtoService;
@Autowired
DtoCalculations dtoCalculations;
@Autowired
MailService mailService;
@Autowired
TransDtoRepository transDtoRepository;
@Autowired
TransDtoApproverDetailsRepository approverDetails;
public ThreadComponent(ThreadDTO threadDTO,
List<Details> approvalDetails, ApplicationContext ctx)
{
this.dto1 = threadDTO.getDto1();
this.dto2 = threadDTO.getDto2();
this.dtoVal = threadDTO.getDto1().getConfig();
this.schemaName = threadDTO.getDto1().getSchemaName();
this.checkCondition = threadDTO.getCheckCondition();
this.user = threadDTO.getUser();
this.oldApprovalDetails = approvalDetails.get(0);
this.newApprovalDetails = approvalDetails.get(1);
this.threadDTO = threadDTO;
this.ocrService = ctx.getBean(OcrService.class);
this.notificationService = ctx.getBean(NotificationService.class);
this.createRecordService = ctx.getBean(CreateRecordsService.class);
this.dtoService = ctx.getBean(DtoService.class);
this.dtoCalculations = ctx.getBean(DtoCalculations.class);
this.mailService = ctx.getBean(MailService.class);
this.transDtoRepository = ctx.getBean(TransDtoRepository.class);
this.approverDetails = ctx.getBean(TransDtoApproverDetailsRepository.class);
}
Конструктор содержит все переменные, объявленные в области видимости класса.