如何从Ratpack groovy中的ServerConfig块绑定配置?

时间:2017-04-24 15:02:12

标签: groovy ratpack

我正在尝试使用ratpack.groovy中的ServerConfig块合并服务器和数据库配置,但尝试创建数据源时postgresConfig为空。

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

1 个答案:

答案 0 :(得分:0)

bindings块中,您可以引用serverConfig配置,从而获得已配置的PostgresConfig。在您的使用案例中,您不需要require("/postgres", PostgresConfig)声明。

您可以使PostgresModule类不延伸ConfigurableModule,因为它不用作模块。

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