我有下面这个类,它有多个自定义
ThreadPoolTaskExecutors
我在这个例子中用一个来展示它。
@Configuration
@EnableAsync
public class ExecutorConfig {
@Bean(name = "streetCheckerExecutor")
public Executor getStreetAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(50);
executor.setQueueCapacity(1000000);
executor.setThreadNamePrefix("streetCheckerExecutor-");
executor.initialize();
return executor;
}
}
我有以下从数据库获取内容的类,我想能够检查
streetCheckerExecutor
如果小于某个数字,则将内容添加到队列中
@Component
public class StreetChecker {
@Autowired
StreetRepository streetRepository;
@Autowired
StreetCheckService streetChecker;
@EventListener(ApplicationReadyEvent.class)
public void checkStreets() {
try {
List<Street> streetList = streetRepository.getStreets();
for (int i = 0; i < streetList.size(); i++) {
streetChecker.run(streetList.get(i));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("---------------------");
}
}
}
下面是工人阶级
@Component
public class StreetCheckService {
@Async("streetCheckerExecutor")
public void run(Content content) {
try {
//do work
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
我正在处理大量数据,我不想每次都从数据库中获取所有数据,但我想检查
StreetcherExecutor公司
如果少于一个数字,我想从数据库中获取更多的内容并将其添加到
StreetcherExecutor公司
魁克
下面是我的想法,我可以通过转换上面的
checkStreets
到下面那个
@EventListener(ApplicationReadyEvent.class)
public void checkStreets() {
while (true) {
try {
// check the queue size of streetCheckerExecutor
// if less than a number
// add to the queue
// else keep waiting and will try again in X minutes
} catch (Exception e) {
} finally {
try {
Thread.sleep(1000 * 60);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
但是我怎么才能得到
checkStreets()
方法?