fichier .yml
cassandra:
keyspaceApp:junit
solr:
keyspaceApp:xyz
Haricot
@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
@Value("${keyspaceApp:@null}") private String keyspaceApp;
Fichier de méthode 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);
}
}
Cas de test
@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 ****");
}
}
Au lieu de définir junit en tant que keyspaceApp, il définit xyz.
On dirait que prefix = "cassandra" ne fonctionne pas
On dirait que vous essayez d'utiliser Spring Boot Propriétés de configuration Typesafe feature.
Donc, pour qu'il fonctionne correctement, vous devez ajouter quelques modifications à votre code:
Tout d’abord, votre classe CommonDataApplication
devrait avoir une annotation @EnableConfigurationProperties
, par exemple.
@EnableAutoConfiguration
@ComponentScan
@PropertySource("application.yml")
@EnableConfigurationProperties
public class CommonDataApplication {
public static void main(String[] args) {
// ...
}
}
Je ne pense pas que vous ayez besoin de l'annotation @PropertySource("application.yml")
car application.yml
(ainsi que application.properties
et application.xml
) est un fichier de configuration par défaut utilisé par Spring Boot.
Votre classe CassandraClientNew
n'a pas besoin d'avoir la propriété @Value
préfixant keyspaceApp
. Et votre keyspaceApp
doit avoir une méthode de définition.
@Component
@ConfigurationProperties(prefix="cassandra")
public class CassandraClientNew {
private String keyspaceApp;
public void setKeyspaceApp(final String keyspaceApp) {
this.keyspaceApp = keyspaceApp;
}
}
En passant, si vous utilisez List
's ou Set
s et que vous initialisez des collections (par exemple, List<String> values = new ArrayList<>();
), seul le getter est requis. Si une collection n'est pas initialisée, vous devez également fournir une méthode de définition (sinon, une exception sera levée).
J'espère que cela aidera.
Je ne sais pas d'où vient le "xyz" (peut-être que vous ne montrez pas tout votre application.yml?). Vous ne liez pas normalement avec @Value
dans @ConfigurationProperties
cependant (il n’a aucun moyen de savoir quel est votre préfixe). Avez-vous réellement @EnableCongigurationProperties
quelque part? Utilisez-vous SpringApplication
pour créer le contexte d'application?
http://www.baeldung.com/configuration-properties-in-spring-boot
Cela ne fonctionne que pour moi avec SB 1.5.4-RELEASE. Simple avec juste ça. Voir le post ci-dessus pour plus d'informations.
@Configuration
@ConfigurationProperties(prefix = "mail")
public class ConfigProperties