2015-04-12 25 views
16

Bahar çizme birçok hoş özellikleri ile birlikte geliyor. Benim favorim, @ConfigurationProperties ve ilgili yml/properties dosyaları aracılığıyla tip güvenli bir yapılandırma mekanizmasıdır. Datastax Java sürücüsü ile Cassandra bağlantısını yapılandıran bir kütüphane yazıyorum. Geliştiricilerin sadece yml dosyasını düzenleyerek Cluster ve Session nesnelerini yapılandırmasına izin vermek istiyorum. Bu, önyüklemede kolay. Ama ona bu şekilde birden fazla bağlantı yapılandırmasına izin vermek istiyorum.Bahar Boot - yuvalama ConfigurationProperties

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 

o ConfigurationProperties kullanarak yay çizme içinde mümkün mü (bu pasajı Symfony documentation geliyor): - PHP çerçevede Symfony kadar kolaydır? Onları yuvalamalı mıyım?

+0

Rasgele sayıdaki alt nesnelerin ("bağlantılarınız" gibi) güvenli bir şekilde yuvalayamayacağınızdan eminsiniz, ancak olası bir "Harita bağlantılar" bildirmeniz mümkün olabilir. Bu işe yaramazsa, belki de GitHub'da bir özellik isteği yapın. – chrylis

cevap

23

Aslında, güvenli yuvalanmış iç ConfigurationProperties kullanabilirsiniz.

@ConfigurationProperties 
public class DatabaseProperties { 

    private Connection primaryConnection; 

    private Connection backupConnection; 

    // getter, setter ... 

    public static class Connection { 

     private String host; 

     // getter, setter ... 

    } 

} 

Artık özelliği primaryConnection.host olarak ayarlayabilirsiniz.

İç sınıfları kullanmak istemiyorsanız, @NestedConfigurationProperty ile alanlara açıklama ekleyebilirsiniz.

@ConfigurationProperties 
public class DatabaseProperties { 

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

    @NestedConfigurationProperty 
    private Connection backupConnection; 

    // getter, setter ... 

} 

da Reference Guide ve Configuration Binding Docs bakınız.

+1

İlkbahar önyükleme 1.3.0.RELEASE olarak, iç sınıfın public olması gerekiyor, aksi halde java.lang.IllegalAccessException olsun: Sınıf org.springframework.beans.BeanUtils sınıfın bir üyesine erişemiyor ... DatabaseProperties $ Connection değiştiricilerle "özel" –

+0

Düzenli sınıf için (iç olmayan sınıf) alıcı ve ayarlayıcı nasıl olacak? – kamal

+0

Bunlar, iç sınıflarda olduğu gibi düzenli alıcı ve ayarlayıcıdır. Eğer özelliğini 'primaryConnection.host' ayarlamak istiyorsanız, Bahar sen' getPrimaryConnection() için çağırır. SETHOST (çok soyut ve içten belki doğru değil) (değeri) ' –

İlgili konular