public static synchronized GcDbTopiaApplicationContext create(String classifier, String... args) {
log.info(String.format("Create db application context (classifier: %s), (args: %s)", classifier, Arrays.toString(args)));
GcDbConfig config = new GcDbConfig(classifier, args);
JdbcConfiguration jdbcConfiguration = new JdbcConfigurationBuilder().forDatabase(config.getJdbcUrl(), config.getJdbcLogin(), config.getJdbcPassword());
BeanTopiaConfiguration topiaConfiguration = new BeanTopiaConfiguration(jdbcConfiguration);
topiaConfiguration.setTopiaIdFactoryClass(LegacyTopiaIdFactory.class);
topiaConfiguration.setValidateSchema(false);
topiaConfiguration.setInitSchema(false);
Map<String, String> hibernateExtraConfiguration = topiaConfiguration.getHibernateExtraConfiguration();
hibernateExtraConfiguration.put(HibernateAvailableSettings.CONNECTION_PROVIDER, HikariCPConnectionProvider.class.getName());
hibernateExtraConfiguration.put("hibernate.hikari.minimumIdle", "" + 2);
hibernateExtraConfiguration.put("hibernate.hikari.maximumPoolSize", "" + 100);
hibernateExtraConfiguration.put("hibernate.hikari.autoCommit", "" + false);
hibernateExtraConfiguration.put("hibernate.hikari.registerMbeans", "" + true);
return new GcDbTopiaApplicationContext(topiaConfiguration, config);
}