Лучший способ инициализировать JpaPersistModule
Я использую 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 ответа
Попробуй это
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...
}
}
Module
Как правило, создаются вручную, потому что они создаются до Injector
является. Вы можете перепрыгнуть через несколько циклов, чтобы внедрить модуль, если вы действительно хотите, например, создать один инжектор, использовать его для создания одного или нескольких модулей, а затем создать дочерний инжектор, используя их. Хотя я не вижу в этом смысла. Создание Properties
вручную и передача их мне не кажется большой проблемой.