我有一个服务班和一个DAO班。在DAO类中,我正在使用hibernate和JPA在DB中执行操作。我想在DAO类的@Async方法上添加一些延迟。
在每个异步调用之前,应该有一些延迟。如何在不增加服务等级延迟的情况下做到这一点?
注意:我不想在SearchService.java中添加延迟
SearchService.java
public void updateService(List<Map<String,Object>> req) {
for(Map<String,Object> requestMap : req) {
searchDao.saveEntity(requestMap);
}
}
SearchDAO.java
@Async
@Retryable(value = Throwable.class, maxAttempts = REATTEMPT)
public void saveEntity(Map<String,Object> requestMap){
// perform DB operations. insert or update in DB
}
答案 0 :(得分:0)
尽管您尝试实现目标的方法非常有争议,但这可以使用Spring Aspects来完成:
@Aspect
@Component // make sure your @ComponentScan processes the package this class is placed at
public class DelayAsyncOperations {
@Around("@annotation(async)")
public Object delayAsync(ProceedingJoinPoint pjp) {
Thread.sleep(1000);
return pjp.proceed();
}
}
答案 1 :(得分:0)
一旦遇到像您这样的问题,我就解决了将线程池大小修改为1的问题。 有助于避免在数据库中重复插入
@Bean
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor bean = new ThreadPoolTaskExecutor();
bean.setCorePoolSize(1);
bean.setMaxPoolSize(1);
bean.setWaitForTasksToCompleteOnShutdown(Boolean.TRUE);
return bean;
}