初始化JpaPersistModule的最佳方法

时间:2011-12-14 09:39:17

标签: jpa-2.0 guice

我在我的应用程序中使用com.google.inject.persist.jpa.JpaPersistModule。配置位于persistence.xml文件中,但有些属性是动态的,我不希望将它们存储在此文件中(例如javax.persistence.jdbc.url等),而是从其他来源注入它们。

我知道有一种JpaPersistModule.properties(java.util.Properties p)方法可以完全满足我的需要。问题是我没有看到将java.util.Properties对象传递给模块的好方法。我不想在模块代码中明确地创建java.util.Properties的实例,而是宁愿使用一些guice风格的机制来注入它。

这有可能吗?你如何解耦JPA模块及其配置属性?

2 个答案:

答案 0 :(得分:0)

Module通常是手动创建的,因为它们是在Injector之前创建的。如果确实想要的话,你可以跳过一些箍来注入模块,例如创建一个注入器,使用它来创建一个或多个模块,然后使用它们创建一个子注入器。我真的没有看到这一点。手动创建Properties并将其传递给我似乎不是什么大不了的事。

答案 1 :(得分:0)

试试这个

public class DbModule extends AbstractModule {
private final Properties properties;

public DbModule(Properties properties) {
    this.properties = properties;
}

@Override
protected void configure() {
    JpaPersistModule jpa = new JpaPersistModule("my-unit");
    jpa.properties(properties);
    jpa.configure(binder());
    //bind other stuff here...
}
}