在使用hibernate search建立索引时发现的一个问题
我程序里有14个实体类,数据库里表是17个,没有任何数据,之前三个实体的时候没有问题,但今天用hibernatesearch建立索引时,用junit测试时会有大概30%左右的概率会出现卡死的现象。然后在tomcat中运行,每次必卡死。跟踪了一下源码,发现hibernatesearch在建立索引的时候在运行BatchCoordinator这个类的dobatchwork方法的时候卡住的。
源码中是用ExecutorService,利用java的线程池来执行多个线程,每个线程分别对每个实体建立索引。
在debug的时候,发现如果挨个执行的话,是没有问题的。但如果一起执行的话,就会有问题。具体原因不明,看了一下最新的4.2版的源码,这个地方没变。所以为了能用,我只好采用比较极端的处理办法,把这里多线程并发执行改成挨个执行,效率可想而知会受到影响,不过考虑到只是建立索引的话问题不大,就是不知道会不会影响其他的,目前就是这种处理办法了。
下为源码(未改动)
private void doBatchWork() throws InterruptedException { ExecutorService executor = Executors.newFixedThreadPool( rootEntities.length, "BatchIndexingWorkspace" ); for ( Class<?> type : rootEntities ) { executor.execute( new BatchIndexingWorkspace( searchFactoryImplementor, sessionFactory, type, objectLoadingThreads, collectionLoadingThreads, cacheMode, objectLoadingBatchSize, endAllSignal, monitor, backend, objectsLimit ) ); } executor.shutdown(); endAllSignal.await(); //waits for the executor to finish }
相关推荐
瓜牛呱呱 2020-11-12
coolrainman 2020-07-28
柳木木的IT 2020-11-04
yifouhu 2020-11-02
lei0 2020-11-02
源码zanqunet 2020-10-28
源码zanqunet 2020-10-26
一叶梧桐 2020-10-14
码代码的陈同学 2020-10-14
lukezhong 2020-10-14
lzzyok 2020-10-10
anchongnanzi 2020-09-21
clh0 2020-09-18
changcongying 2020-09-17
星辰大海的路上 2020-09-13
abfdada 2020-08-26
mzy000 2020-08-24
shenlanse 2020-08-18
zhujiangtaotaise 2020-08-18