Как правильно настроить 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 ответ

Как я уже говорил в своем первоначальном редактировании, я нашел приемлемое решение:

  1. Создайте файл persistence.xml с настройками по умолчанию
  2. Переопределите пользовательские настройки в методе @Bean
Другие вопросы по тегам