Выдача условных бинов приводит к ошибке «Нет подходящего бина типа« javax.sql.DataSource »доступен» - PullRequest
0 голосов
/ 09 октября 2018

Я определил условный компонент:

@Conditional(CustomClass.class)
public class CustomClass implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return false;
    }

    @Bean(name = "bean1")
    public DataSource dummy() {
        HikariDataSource dataSource = new HikariDataSource(config);
        return dataSource;
    }

}

В другом классе я внедряю компонент bean1 следующим образом:

public anotherClass(@Qualifier("bean1") DataSource dataSource) {
}

Но когда метод сопоставления условного класса возвращается, ложь, я получаю:

"Нет подходящего бина типа 'javax.sql.DataSource' доступно"

Если match возвращает true, ошибки нет.

Разве условные бины не предназначены для условной загрузки бинов?

1 Ответ

0 голосов
/ 09 октября 2018

Да, это и есть цель условной загрузки компонента.

Вы получаете ошибку, когда метод matches возвращает значение false, потому что больше нет компонента, доступного для автопроводки.Вы также должны определить DataSource для этого случая (так что bean-компонент типа DataSource доступен, если ваш текущий matches возвращает false).

Вы можете сделать это в другом @Configuration, которыйрасширяет Condition и для которого метод matches будет возвращать противоположное значение вашего текущего определенного matches.

...