2017-04-24 5 views
0

ratpack.groovy内のServerConfigブロックを使用してサーバーとデータベースの構成をマージしようとしましたが、データソースを作成しようとしたときにpostgresConfigがnullです。Ratpack groovyのServerConfigブロックからコンフィギュレーションをバインドする方法はありますか?

PostgresConfig.groovy

@Compile Static 
class PostgresConfig { 
    String user 
    String password 
    String serverName 
    String databaseName 
    Integer portNumber 
} 

PostgresModule.groovy

@CompileStatic 
class PostgresModule extends ConfigurableModule<PostgresConfig> { 
    @Override 
    protected void configure() { 
    } 

    @Provides 
    DataSource dataSource(final PostgresConfig config) { 
     createDataSource(config) 
    } 

    protected DataSource createDataSource(final PostgresConfig config) { 
     new PgSimpleDataSource(
      user:   config.user, 
      password:  config.password, 
      serverName: config.serverName, 
      databaseName: config.databaseName, 
      portNumber: config.portNumber 
     ) 
    } 
} 

ratpack.groovy

ratpack { 
    serverConfig { 
     props([ 
      'postgres.user':   'username', 
      'postgres.password':  'password', 
      'postgres.serverName': 'localhost', 
      'postgres.databaseName': 'postgres', 
      'postgres.portNumber': 5432 
     ] as Map<String, String>) 
     yaml "config.yaml" 
     env() 
     sysProps() 
     require("/postgres", PostgresConfig) 
    } 
    bindings { 
     PostgresConfig postgresConfig 
     module HikariModule, { HikariConfig config -> 
      config.dataSource = new PostgresModule().dataSource(postgresConfig) 
     } 
    } 
} 

答えて

0

bindingsブロックではserverConfigの設定を参照できるので、PostgresConfigを設定してください。あなたのユースケースでは、require("/postgres", PostgresConfig)ステートメントは必要ありません。

ConfigurableModuleは、モジュールとして使用されていないため、PostgresModuleクラスを拡張できないようにすることができます。

ratpack { 
    serverConfig { ... } 
    bindings { 
     module HikariModule, { HikariConfig config -> 
      config.dataSource = new PostgresModule().dataSource(serverConfig.get("/postgres", PostgresConfig) 
     } 
    } 
}