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