Как правильно настроить Kundera программно с помощью Spring Boot из методов @Bean?
Я нашел приемлемое решение. Смотри ниже.
Я хочу использовать Kundera в качестве поставщика сохраняемости для хранения моих объектов JPA в HBase. Я делаю все на основе аннотаций, то есть я не имею и не хочу, чтобы persistence.xml.
До сих пор я сделал следующее:
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
bean.setPersistenceProviderClass(KunderaPersistence.class);
final Properties props = new Properties();
props.setProperty("kundera.dialect", "hbase");
props.setProperty("kundera.client.lookup.class",
HBaseClientFactory.class.getName());
props.setProperty("kundera.cache.provider.class",
EhCacheProvider.class.getName());
props.setProperty("kundera.cache.config.resource",
"/ehcache.xml");
props.setProperty("kundera.ddl.auto.prepare", "update");
props.setProperty("kundera.nodes", "myhbase.example.com");
props.setProperty("kundera.port", "2182");
props.setProperty("kundera.keyspace", "foo");
bean.setJpaProperties(props);
return bean;
}
у меня есть ehcache.xml
с конфигурацией по умолчанию в моем src/main/resources
,
Когда я пытаюсь запустить это, выручает, трассировка стека сводится к:
... many more ...
Caused by: java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}
at org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager.obtainDefaultPersistenceUnitInfo(DefaultPersistenceUnitManager.java:655)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.determinePersistenceUnitInfo(LocalContainerEntityManagerFactoryBean.java:358)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:307)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1613)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550)
... 152 more
Когда я устанавливаю имя единицы персистентности через bean.setPersistenceUnitName("foo");
Я получил: No persistence unit with name 'foo' found
Что я делаю не так, НУЖНО ЛИ Я НАСТОЯЩИЙ файл persistence.xml? Я не хочу, потому что я хочу иметь возможность установить конфигурацию с помощью переключателей командной строки. Они вставлены в Environment
Я могу использовать в качестве параметра для моего @Bean
метод и положить в мои свойства объекта таким образом.
--- РЕДАКТИРОВАТЬ ---
Я сейчас создал persistence.xml
с основными настройками, и просто переопределить пользовательские в моем Properties
объект. Это работает, но теперь у меня есть другая проблема, подключение к HBase блокирует процесс Java так сильно, что мне приходится убивать -9. Другой вопрос следует.
1 ответ
Как я уже говорил в своем первоначальном редактировании, я нашел приемлемое решение:
- Создайте файл persistence.xml с настройками по умолчанию
- Переопределите пользовательские настройки в методе @Bean