弹簧靴 - 嵌套配置属性

2022-08-31 14:59:12

弹簧靴具有许多很酷的功能。我最喜欢的一个是通过@ConfigurationProperties和相应的yml/properties文件的类型安全配置机制。我正在编写一个通过Datastax Java驱动程序配置Cassandra连接的库。我想允许开发人员通过简单地编辑yml文件来配置和对象。这在弹簧靴中很容易。但我想允许她/他以这种方式配置多个连接。在PHP框架 - Symfony中,它就像:ClusterSession

doctrine:
  dbal:
    default_connection: default
    connections:
      default:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
      customer:
        driver:   "%database_driver2%"
        host:     "%database_host2%"
        port:     "%database_port2%"
        dbname:   "%database_name2%"
        user:     "%database_user2%"
        password: "%database_password2%"
        charset:  UTF8

(此代码片段来自 Symfony 文档)

是否可以在 Spring-Boot 中使用 ConfigurationProperties?我应该嵌套它们吗?


答案 1

您实际上可以使用类型安全的嵌套 。ConfigurationProperties

@ConfigurationProperties
public class DatabaseProperties {

    private Connection primaryConnection;

    private Connection backupConnection;

    // getter, setter ...

    public static class Connection {

        private String host;

        // getter, setter ...

    }

}

现在,您可以设置属性 。primaryConnection.host

如果不想使用内部类,则可以使用 .@NestedConfigurationProperty

@ConfigurationProperties
public class DatabaseProperties {

    @NestedConfigurationProperty
    private Connection primaryConnection; // Connection is defined somewhere else

    @NestedConfigurationProperty
    private Connection backupConnection;

    // getter, setter ...

}

另请参阅参考指南配置绑定文档


答案 2

推荐