如何使用@Bean方法的Spring Boot以编程方式正确配置Kundera?

时间:2014-12-09 08:51:13

标签: spring hibernate jpa spring-boot kundera

我找到了一个可接受的解决方案。请看下面。

我想使用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 个答案:

答案 0 :(得分:0)

正如我在原始编辑中所述,我找到了一个可接受的解决方案:

  1. 使用默认设置
  2. 创建persistence.xml
  3. 覆盖@Bean方法中的自定义设置