I have created one config method ,service and controller using threadpooling but while hitting api in postman ,the download functionality is not working , im new to the backend. ur help will be much appreciated. im not sure my service is working through threadpool, there is no executorService to run the tasks.
package com.ford.capworkflowserv.workflow.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
@EnableAsync
public class ThreadConfig {
@Bean(name ="taskExecutor")
public Executor taskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(50);
executor.setQueueCapacity(100);
executor.setThreadNamePrefix("FileProcessor-");
executor.initialize();
return executor;
}
}
@Autowired
private GechubConfig gechubConfig;
@Autowired
private GechubUtils gechubUtils;
@Autowired
private Executor taskExecutor;
@Async("taskExecutor")
public CompletableFuture<List<String>> downloadFilesFromGecHub(List<String> fileNames) {
return CompletableFuture.supplyAsync(() -> {
ChannelSftp channelSftp = null;
List<String> results;
try {
channelSftp = gechubUtils.getSftpChannel();
if (channelSftp != null) {
channelSftp.cd(gechubConfig.getGechubOutDir());
log.info("Present Working Directory in Remote system --> " + channelSftp.pwd());
List<ChannelSftp.LsEntry> fileList = channelSftp.ls("*");
ChannelSftp finalChannelSftp = channelSftp;
results = fileNames.stream().map(fileName -> {
for (ChannelSftp.LsEntry file : fileList) {
if (!file.getAttrs().isDir() && !file.getFilename().startsWith(".") && file.getFilename().equals(fileName)) {
try {
finalChannelSftp.get(file.getFilename(), "src/main/resources/" + file.getFilename());
return "File " + fileName + " downloaded successfully";
} catch (SftpException e) {
return "Exception occurred while processing " + fileName + ": " + e.getMessage();
}
}
}
return "File " + fileName + " not found";
}).collect(Collectors.toList());
} else {
results = fileNames.stream()
.map(fileName -> "Could not connect to Gechub for file " + fileName)
.collect(Collectors.toList());
}
} catch (JSchException | SftpException e) {
results = fileNames.stream()
.map(fileName -> "Exception occurred while processing " + fileName + ": " + e.getMessage())
.collect(Collectors.toList());
} finally {
gechubUtils.disconnectChannel(channelSftp);
}
return results;
}, taskExecutor);
}
@GetMapping(path = "/fileDownload")
public CompletableFuture<ResponseEntity<List<String>>> downloadFilesFromGecHub(@RequestParam List<String> fileNames) {
return gechubService.downloadFilesFromGecHub(fileNames)
.thenApply(ResponseEntity::ok);
}
New contributor
venki is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.