私はGuiceと仕事をしており、デザインに関する質問が1つあります。私のアプリはいくつかのモジュールから構成されていますGoogle guice、オーバーライド設定
- myappの永続性(JPAエンティティ、DAO、他のDB関連のもの)
- myappの-バックエンド(いくつかのバックグラウンドデーモン、彼らはmyappの永続性を使用)
- myappの休止(myapp-persistenceに依存するRESTアプリケーション)
myapp-persistenceには、シングルトンのHibernateSessionFactoryが必要です。これはHibernateの設計によるものです。私はGuiceのとそれを解決することができ 問題ありません:そのシングルトンにDatabaseConnectionConfigurationを渡すと
class MyAppPersistenceModule extends AbstractModule {
override def configure(): Unit = {
bind(classOf[SomeStuff])
bind(classOf[ClientDao])
bind(classOf[CustomerDao])
bind(classOf[SessionFactory]).toProvider(classOf[HibernateSessionFactoryProvider]).asEagerSingleton()
}
@Provides
def provideDatabaseConnectionConfiguration: DatabaseConnectionConfiguration = {
DatabaseConnectionConfiguration.fromSysEnv
}
}
問題。 myapp-persistenceモジュールは実際にその設定を取得する方法を気にしません。今はsys変数から取り込まれています。
myapp-restはplay-appであり、application.confからconfを読み取り、Guiceを使用して他のコンポーネントに注入したいとします。 myapp-backendは多かれ少なかれ同じことをします。
は、今私は
@Provides
def provideDatabaseConnectionConfiguration: DatabaseConnectionConfiguration = {
DatabaseConnectionConfiguration.fromSysEnv
}
で自分自身をロックしていると私はmyappの-休息とmyappに、バックエンドのために、それは柔軟で設定可能にする方法を理解していません。
UPD は答えによると、私はそれをこのようでした:
定義された形質
trait DbConfProvider {
def dbConf: DbConf
}
を
シングルトンの工場は現在、プロバイダによって異なります。
class HibernateSessionFactoryProvider @Inject()(dbConfProvider: DbConfProvider) extends Provider[SessionFactory] {
}
myappの永続性モジュールが公開すべてのピブリックパーシスタンスモジュールDAOを備えたpublic guiceモジュール。
myapp-persistenceには、テスト目的でのみ使用されるモジュールがあります。以下に記載のMyApp-永続インジェクタロードモジュール:
class MyAppPersistenceDbConfModule extends AbstractModule {
override def configure(): Unit = {
bind(classOf[DbConfProvider]).to(classOf[DbConfSysEnvProvider])
}
}
DbConfSysEnvProviderは、SYS ENVからDB接続設定を読み出します。実稼働ではないケース。
Playアプリは独自のconfメカニズムを持っています。
# play-specific config
play.modules.enabled += "common.components.MyAppPersistenceDbConfModule"
# public components from myapp-persistence module.
play.modules.enabled += "com.myapp.persistence.connection.PersistenceModule"
そして、私の設定サービス:
@Singleton
class ConfigurationService @Inject()(configuration: Configuration) extends DbConfProvider {
...}
アイデアありがとう! – Sergey