【问题标题】:Best way to initialize JpaPersistModule初始化 JpaPersistModule 的最佳方法
【发布时间】:2011-12-14 09:39:17
【问题描述】:

我在我的应用程序中使用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 模块及其配置属性?

【问题讨论】:

    标签: jpa-2.0 guice


    【解决方案1】:

    Modules 通常是手动创建的,因为它们是在 Injector 之前创建的。如果你真的需要,你可以跳过一些循环来注入一个模块,例如创建一个注入器,使用它来创建一个或多个模块,然后使用这些创建一个子注入器。不过,我真的不明白这一点。手动创建 Properties 并将它们传入对我来说似乎没什么大不了的。

    【讨论】:

      【解决方案2】:

      试试这个

      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...
      }
      }
      

      【讨论】:

      • 你应该使用install(new JpaPersistModule("my-unit").properties(properties))。来自配置方法 Do not invoke this method directly to install submodules 的文档
      猜你喜欢
      • 2018-03-09
      • 2011-11-24
      • 1970-01-01
      • 2015-07-16
      • 2015-12-02
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多