gpt4 book ai didi

java - 使用spring从服务层启动新线程的正确方法

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:41 25 4
gpt4 key购买 nike

我有一个很少调用的方法。此方法收集数据库中的垃圾。我不想让用户等待服务器响应,所以我决定从我的服务层的新线程调用这个方法。我正在使用 Spring 。服务等级:

@Service
@Transactional
public class UploadService {

@Resource(name = "UploadDAO")
private UploadDao uploadDao;

我不想等待的方法

public void collectBlobGarbage(){
Thread th = new Thread(new Runnable() {
@Override
public void run() {
uploadDao.collectBlobGarbage();
}
});
th.start();
}

这样做好吗?

最佳答案

如果你的类路径中有 Spring,你不妨使用 @Async

@Async
public CompletableFuture<Void> collectBlobGarbage() throws InterruptedException {
CompletableFuture.completeFuture(uploadDao.collectBlobGarbage());
}

在您的主类中,您需要使用 @EnableAsync,例如:

@SpringBootApplication
@EnableAsync
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

并且您需要一个执行器 bean:

@Bean
public Executor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(500);
executor.setThreadNamePrefix("Stackoverflow-");
executor.initialize();
return executor;
}

关于java - 使用spring从服务层启动新线程的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46888314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com