custom configurationproperties annotation java spring spring-boot

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á.