我正在尝试使用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)
}
}
}
答案 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)
}
}
}