Значение отдельных свойств "bean" пружин переопределяется при настройке с помощью соответствующего выделенного файла "свойств" (с использованием @PropertySource) - PullRequest
2 голосов
/ 17 апреля 2019

Я пытаюсь инициализировать два разных Spring bean-компонента (bean1 и bean2) с их выделенными файлами свойств ('bean1' из 'bean1.properties' и 'bean2' из bean2.properties), с обоими bean1 и 2 свойствами.с тем же «введите код здесь eys» с другим значением.Но при попытке сделать это, bean1 и bean2 инициализируются только «значениями» из bean1.properties (в то время как bean2.properties игнорируется).

Демонстрационный код находится на GitHub

Обычно используется @PropertySource для загрузки соответствующего файла свойств из classpath.

@Component
@PropertySource("classpath:bean1.properties")
@ConfigurationProperties
public class Bean1 {
    private String symbol;
    private String tenor;
    // omitting code
}


@Component
@PropertySource("classpath:bean2.properties")
@ConfigurationProperties
public class Bean2 {
    private String symbol;
    private String tenor;
    // omitting other code
}

bean1.properties:

symbol=bean1symbol
tenor=bean1tenor

bean2.properties

symbol=bean2symbol
tenor=bean2tenor

Я ожидаю, что свойства bean1 и bean2 инициализируются на основе соответствующих значений их файлов свойств, [когда они имеют одинаковый ключ].

Когда я печатаю символ и тенор для Bean1 и Bean2, символ и тенор печатаются одинаковозначения (из bean2.properties).

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Spring будет читать все файлы свойств в одном и том же пространстве имен - поэтому в случае, если bean2.properties будет прочитан после bean1.properties, он перезапишет уже определенные свойства.

Так что, возможно, вы могли бы изменить свои свойствачтобы быть названным так:

bean1.symbol=bean1symbol
bean2.tenor=bean1tenor

bean2.symbol=bean2symbol
bean2.tenor=bean2tenor

или проще:

symbol1=bean1symbol
tenor2=bean1tenor

symbol2=bean2symbol
tenor2=bean2tenor

Поэтому, пожалуйста, будьте осторожны, чтобы ваши свойства назвали глобально уникальными.

Для уже существующих свойств, пожалуйста,взгляните на Общие свойства приложения

1 голос
/ 17 апреля 2019

Проблема связана с конфликтом имен свойств в Spring Environment. Вы используете @PropertySource, чтобы сообщить Spring исходным свойствам из дополнительных местоположений, но эти свойства входят в тот же Environment.

Вместо этого попробуйте префикс своих свойств в файлах * .properties и используйте @ConfigurationProperties(prefix = "my.prefix") для устранения неоднозначности свойств с тем же именем.

Например:

@Component
@PropertySource("classpath:bean1.properties")
@ConfigurationProperties(prefix = "bean1")
@Configuration
public class Bean1 {

    private String symbol;

    private String tenor;

    //omitting code
}


@Component
@PropertySource("classpath:bean2.properties")
@ConfigurationProperties(prefix = "bean2")
@Configuration
public class Bean2 {

    private String symbol;

    private String tenor;

    //omitting other code
}

Тогда в ваших * .properties файлах у вас будет:

bean1.symbol=
bean1.tenor=

bean2.symbol=
bean2.tenor=
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...