当前位置: 首页 > 知识库问答 >
问题:

如何在Ratpack Groovy中从ServerConfig块绑定配置?

吕新
2023-03-14

我试图使用RatPack.groovy中的ServerConfig块合并服务器和数据库配置,但是在试图创建数据源时PostgreSconfig为空。

@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个答案

尉迟德惠
2023-03-14

Bindings块中,可以引用ServerConfig配置,从而获得配置的PostgreSconfig。在您的用例中,您不需要require(“/Postgres”,PostgresConfig)语句。

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

ratpack {
    serverConfig { ... }
    bindings {
        module HikariModule, { HikariConfig config ->
            config.dataSource = new PostgresModule().dataSource(serverConfig.get("/postgres", PostgresConfig)
        }
    }
}
 类似资料:
  • 我正在尝试构建一个自定义的< code>NavBar,带有一些可选的< code >视图,比如searchbar(但前提是视图需要显示它)。 基本上,我需要在视图中传递一些带有参数。 下面是一个示例: 我所说的属性是和。但是执行 或 会引发编译错误: 无法将类型“绑定?”的值分配给类型“绑定” 你知道我该如何解决这个问题吗? 还是有更好的方法来做我想做的事?

  • 我想在 init 方法中默认 returnGroup 为 nil,但是我收到以下错误 Nil 默认参数值无法转换为类型 'Binding' 想知道如何将绑定设置为 nil ?

  • 每一个Ruby块中,都包含了代码以及对应的绑定。当你定义一个块的时候,它会夺过当时环境的绑定,而当你执行一个带块的方法的时候,它又会传递这个绑定。 def who person = "Matz" yield("rocks") end person = "Matsumoto" who do |y| puts("#{person}, #{y} the world") # => Mats

  • 对于主应用程序中的类,所有这些注释都按预期工作。 如何定义模块内自动配置的顺序?

  • 问题内容: 起作用但是 没有。 我无法在python中绑定+ 。是否有所有可能按键的文档? 问题答案: 用途: 我没有指向这些事件名称的完整列表的链接。这是我收集的部分清单:

  • 问题内容: 我认为这在几个月前就可以解决了。常规命令行泊坞窗: 可以正常工作,但是我无法在docker-py中工作: ..总是告诉我,新的不存在。应该如何使用docker-py完成? 问题答案: 以下是进行卷绑定的当前工作方式: