Yay yapılandırma özellikleri yinelemeli türü

oy
1

Ben bağlı listesine benzer şekilde yapılandırılmış bir özyinelemeli sınıf olan yapılandırma özellikleri sınıfı oluşturmak çalışıyorum. Ben Bahar önyükleme 2.0.6.RELEASE kullanıyorum ve sınıf kullanılarak autowired ediliyor @EnableConfigurationProperties({EnginealConfig.class}).

Ben yaşıyorum sorun tek bir ilk seviye, test nesnesine bağlı olacaktır x.testset olsun asla.

Aşağıdaki application.properties dosyası kullanma:

engineal.x.value: Test1
engineal.x.test.value: Test2
engineal.x.test.test.value: Test3

Ve aşağıdaki yapılandırma özellikleri sınıfı:

@ConfigurationProperties(prefix = engineal)
public class EnginealConfig {

    static class Test {

        private String value;
        private Test test;

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        public Test getTest() {
            return test;
        }

        public void setTest(Test test) {
            this.test = test;
        }

        @Override
        public String toString() {
            return Test{ +
                    value=' + value + '\'' +
                    , test= + test +
                    '}';
        }
    }

    private Test x;

    public Test getX() {
        return x;
    }

    public void setX(Test x) {
        this.x = x;
    }

    @Override
    public String toString() {
        return EnginealConfig{ +
                x= + x +
                '}';
    }
}

Nesne yazdırılacaktır EnginealConfig{x=Test{value='Test1', test=null}}. Maalesef özyineleme çalışmıyor.

Oyalanmayı bu işe almak için farklı şeyler denemeye sonra gelen EnginealConfig # WhichAirline değişen çalıştı private Test test;etmek private List<Test> test;Alıcı ve ayarlayıcıların birlikte. Sonra bir eleman ile listelerini kullanarak, bu tekrarlama çalışır.

Aşağıdaki application.properties List<Test>değişikliği:

engineal.x.value: Test1
engineal.x.test[0].value: Test2
engineal.x.test[0].test[0].value: Test3

çıkış olacak EnginealConfig{x=Test{value='Test1', test=[Test{value='Test2', test=[Test{value='Test3', test=null}]}]}}. Sonra kullanarak bir sonraki eleman erişebilirler test.get(0).

özyineleme özyinelemeli tip bir koleksiyonunda yalnızca desteklenir sanki Öyle görünüyor.

Bu geçici çözüm Tamam olsa da, bunu yapmanın ilk yolu kullanmayı tercih ediyorum. / Sınıfları bir koleksiyon gerek kalmadan desteklenmelidir özyinelemeli gerektiğini musunuz? Yardımın için teşekkürler!

Oluştur 20/10/2018 saat 13:09
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0
@ConfigurationProperties(prefix = "engineal")
public class EnginealConfig {

    static class Test {
        //@NestedConfigurationProperty
        private String value;

        @NestedConfigurationProperty
        private Test test;

Sen ile alan açıklama ekleyen @NestedConfigurationPropertyaçıklama.

Cevap 01/04/2019 saat 08:53
kaynak kullanıcı

oy
1

Sadece bireysel bir sınıf olarak iç sınıfını ayarlayın, ardından her şey iyi çalışır.

application.yml

simple:
  value: aa
  myTest:
    value: lower

yapılandırma sınıfı

@ConfigurationProperties(prefix = "simple")
@Data //It is for getter setter
public class SimpleConfig {

    private String value;

    private MyTest myTest;
}

yineleme sınıfı

@Data
public class MyTest {
    private String value;
    private MyTest myTest;
}

Test durumu

@Resource
private SimpleConfig simpleConfig;

@Test
public void myTest(){

    String value = simpleConfig.getValue();
    System.out.println("outerValue : " + value);
    String innerValue = simpleConfig.getMyTest().getValue();
    System.out.println("innerValue :" + innerValue);
}

sonuç

outerValue : aa
innerValue :lower
Cevap 08/04/2019 saat 07:54
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more