Подтвердить что ты не робот

Префикс @ConfigurationProperties не работает

.yml файл

cassandra:
    keyspaceApp:junit
solr:
    keyspaceApp:xyz

Bean

@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
   @Value("${keyspaceApp:@null}") private String keyspaceApp;

Основной файл метода

@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
public class CommonDataApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(CommonDataApplication.class)
                .web(false).headless(true).main(CommonDataApplication.class).run(args);
    }
}

TestCase

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = CommonDataApplication.class)
@IntegrationTest
@EnableConfigurationProperties
public class CassandraClientTest {

    @Autowired
    CassandraClientNew cassandraClientNew;

    @Test
    public void test(){
        cassandraClientNew.getSession();
        System.out.println(" **** done ****");
    }
}

Вместо того, чтобы устанавливать junit как keypaceApp, он устанавливает xyz.

Похоже, что префикс = "cassandra" не работает

4b9b3361

Ответ 1

Похоже, вы пытаетесь использовать Spring Boot Свойства конфигурации конфигурации.

Итак, чтобы он работал правильно, вам нужно добавить несколько изменений в код:

Прежде всего, ваш класс CommonDataApplication должен иметь аннотацию @EnableConfigurationProperties, например.

@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
@EnableConfigurationProperties
public class CommonDataApplication {
    public static void main(String[] args) {
        // ...
    }
}

Я не думаю, что вам нужна аннотация @PropertySource("application.yml") как application.yml (а также application.properties и application.xml) - файл конфигурации по умолчанию, используемый Spring Boot.

В вашем классе CassandraClientNew не требуется @Value префикс аннотации keyspaceApp. И ваш keyspaceApp должен иметь метод setter.

@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
   private String keyspaceApp;

   public String setKeyspaceApp(String keyspaceApp) {
       this.keyspaceApp = keyspaceApp;
   }
}

BTW, если вы используете List или Set, и вы инициализируете коллекции (например, List<String> values = new ArrayList<>();), тогда требуется только getter. Если сбор не инициализирован, вам также необходимо предоставить метод setter (иначе будет выведено исключение).

Я надеюсь, что это поможет.

Ответ 2

Я не знаю, откуда появился "xyz" (может быть, вы не показываете все ваше приложение .yml?). Обычно вы не связываетесь с @Value в @ConfigurationProperties (он не знает, что такое префикс). Вы на самом деле @EnableCongigurationProperties где-нибудь? Используете ли вы SpringApplication для создания контекста приложения?

Ответ 3

http://www.baeldung.com/configuration-properties-in-spring-boot

Это работает только для меня с SB 1.5.4-RELEASE. Просто с этим. См. Выше сообщение для получения дополнительной информации.

@Configuration @ConfigurationProperties(prefix = "mail") public class ConfigProperties