Префикс @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" не работает
Ответы
Ответ 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