java - annotation - El prefijo @ConfigurationProperties no funciona
spring boot map properties (3)
No sé de dónde vino el "xyz" (¿quizás no esté mostrando todo su application.yml?). @ConfigurationProperties
embargo, normalmente no se vincula con @Value
en @ConfigurationProperties
(no tiene forma de saber cuál es su prefijo). ¿Realmente @EnableCongigurationProperties
en @EnableCongigurationProperties
lugar? ¿Está utilizando SpringApplication
para crear el contexto de la aplicación?
archivo .yml
cassandra:
keyspaceApp:junit
solr:
keyspaceApp:xyz
Frijol
@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
@Value("${keyspaceApp:@null}") private String keyspaceApp;
Archivo de método principal
@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);
}
}
Caso de prueba
@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 ****");
}
}
En lugar de establecer junit como keyspaceApp, establece xyz.
Parece que el prefijo = "cassandra" no funciona
Parece que está intentando usar la característica de propiedades de configuración de Spring Boot Typesafe .
Entonces, para que funcione correctamente, debe agregar algunos cambios a su código:
En primer lugar, su clase CommonDataApplication
debe tener la anotación @EnableConfigurationProperties
por ejemplo
@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
@EnableConfigurationProperties
public class CommonDataApplication {
public static void main(String[] args) {
// ...
}
}
No creo que necesite la @PropertySource("application.yml")
ya que application.yml
(así como application.properties
y application.xml
) es un archivo de configuración predeterminado utilizado por Spring Boot.
Su clase CassandraClientNew
no necesita tener la @Value
keyspaceApp
. Y su keyspaceApp
tiene que tener un método setter .
@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
private String keyspaceApp;
public String setKeyspaceApp(String keyspaceApp) {
this.keyspaceApp = keyspaceApp;
}
}
Por cierto, si está utilizando List
o Set
y inicializa las colecciones (por ejemplo, List<String> values = new ArrayList<>();
), entonces solo se requiere getter. Si una colección no se inicializa, también deberá proporcionar un método de establecimiento (de lo contrario se lanzará una excepción).
Espero que le ayudará.
http://www.baeldung.com/configuration-properties-in-spring-boot
Esto solo me funciona con SB 1.5.4-RELEASE. Simple con solo esto. Vea la publicación anterior para más información.
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties