Я настроил maxPoolSize 10 для пула c3p0.minPoolSize - 3. Каждый раз, когда я запускаю свой сервер и выполняю show processlist для базы данных mysql, устанавливаются три соединения.Это останется только три, если не будет огромный трафик на сервер.Это нормально.
Я реализовал функцию поиска, которая начинает индексирование впервые.Когда приложение выполняет поиск и когда я проверяю show processlist для моей базы данных, все соединения БД открыты.Я вижу, что все 10 соединений открыты.Является ли это принятым поведением.В идеале я бы сказал, что использование открытия 2 или 3 соединений могло бы быть хорошо.Почему спящий люцен использует много соединений?Могу ли я настроить максимальное количество соединений где-нибудь для lucene.
Я публикую свой код ниже.
fullTextEntityManager.createIndexer().startAndWait();
будет выполнено только один раз для приложения
@Transactional
public List<E> searchRecord(String searchText) {
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
if (CREATE_INDEX.equals("START")) {
try {
log.info("creating indexes");
fullTextEntityManager.createIndexer().startAndWait();
CREATE_INDEX = "END";
} catch (InterruptedException e) {
log.info("error in creating indexes", e);
}
}
log.info("lucene query builder");
QueryBuilder qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(getEntityClass())
.get();
// org.apache.lucene.search.Query luceneQuery =
// qb.keyword().onFields("name")
// .matching(searchText).createQuery();
if(searchText.contains(" ")){
String[] splittedText = searchText.split(" ");
searchText = splittedText[0];
}
org.apache.lucene.search.Query luceneQuery = qb.keyword().wildcard().onField(getSearchField())
.matching(searchText.toLowerCase() + '*').createQuery();
javax.persistence.Query jpaQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, getEntityClass());
List<E> result = jpaQuery.getResultList();
return result;
}