Переключите бин, изменив свойства в Spring boot - PullRequest
0 голосов
/ 13 октября 2019

У меня есть один интерфейс MyInterface и 2 бина реализации: FirstImpl и SeconImpl. Я хочу переключаться между использованием этих двух реализаций во время работы программы без перезапуска, просто изменяя свойство в файле application.properties, например: interface.bean.default = FirstImpl изменить на interface.bean.default = SecondImpl. Кто-нибудь знает, как это сделать с загрузкой Spring?

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

@ Хасан, ваше обновление будет работать, только если я немного настрою его, как показано ниже:

@Configuration
@RefreshScope
public class MyInterfaceConfiguration {

    @Value("${my.interfacte.impl}")
    String impl;

    @Bean
    @RefreshScope
    public MyInterface getBean(){
        if ("firstImpl".equals(impl)) {
            return new FirstImpl();
        } else if ("secondImpl".equals(impl)) {
            return new SecondImpl();
        }
        return null;
    }

}

Мне нужно использовать 2 @RefreshScope на уровне класса и на уровне метода создания бина!

0 голосов
/ 13 октября 2019

Вы можете попробовать использовать @ConditionalOnProperty:

@Configuration
public class MyInterfaceConfiguration {

    @Bean
    @ConditionalOnProperty(value = "my.interfacte.impl", havingValue="firstImpl")
    public MyInterface firstImpl(){
        return new FirstImpl();
    }

    @Bean
    @ConditionalOnProperty(value = "my.interfacte.impl", havingValue="secondImpl")
    public MyInterface secondImpl(){
        return new SecondImpl();
    }
}

, и когда вы обновите вашу собственность в application.properties с помощью привода / обновления до:

my.interfacte.impl=firstImpl

, вы получитеFirstImpl экземпляр. Если у вас есть:

my.interfacte.impl=secondImpl

, у вас будет SecondImpl.

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