Мне нужно создать около 150 EntityManagerFactories.
Я использую
hibernate-commons-annotations-5.1.2.Final
hibernate-core-5.6.14.Final
hibernate-envers-5.6.14.Final
hibernate-search-backend-elasticsearch-6.1.8.Final
hibernate-search-engine-6.1.8.Final
hibernate-search-mapper-orm-6.1.8.Final
hibernate-search-mapper-pojo-base-6.1.8.Final
hibernate-search-util-common-6.1.8.Final
Создание одной из этих фабрик занимает около 10 секунд, поэтому я хотел бы создать их параллельно, но следующий код инициализирует фабрики сеансов одну за другой.
Как мне добиться параллельной инициализации?
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
import org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor;
import javax.persistence.spi.PersistenceUnitInfo;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public abstract class Test {
private void initManagerFactories() {
List persistenceUnitInfos = getPersistenceUnitInfos();
try (ExecutorService executorService = Executors.newFixedThreadPool(persistenceUnitInfos.size())) {
for(PersistenceUnitInfo persistenceUnitInfo : persistenceUnitInfos) {
Properties properties = persistenceUnitInfo.getProperties();
properties.setProperty("hibernate.current_session_context_class", "thread");
properties.setProperty("hibernate.hql.bulk_id_strategy", "org.hibernate.hql.spi.id.inline.InlineIdsOrClauseBulkIdStrategy");
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty("hibernate.hbm2ddl.jdbc_metadata_extraction_strategy", "individually");
properties.setProperty("hibernate.order_inserts", "true");
properties.setProperty("org.hibernate.envers.store_data_at_delete", "true");
properties.setProperty("hibernate.search.backend.hosts", "localhost:9200");
properties.setProperty("hibernate.search.backend.protocol", "http");
properties.setProperty("hibernate.search.backend.schema_management.settings_file", "custom/index-settings.json");
executorService.submit(
() ->
new EntityManagerFactoryBuilderImpl(
new PersistenceUnitInfoDescriptor(persistenceUnitInfo),
new HashMap()
).build()
);
}
}
}
public abstract List getPersistenceUnitInfos();
}