Classe de configuration,
@Configuration
public class SpringContext {
@Bean
public BlockingQueue<String> queue(@Value("${queue.size}") int queueSize) {
return new LinkedBlockingQueue<>();
}
}
Classe principale,
@SpringBootApplication
public class SpringContextTest {
public static void main(String[] args) {
final SpringApplication springApplication = new SpringApplication(SpringContext.class);
springApplication.setWebEnvironment(false);
springApplication.run();
System.out.println("queue.size" + System.getProperty("queue.size"));
}
}
application.yml,
queue.size: 10
En commençant la classe principale, j'obtiens l'erreur suivante,
Caused by: Java.lang.NumberFormatException: For input string: "${queue.size}"
at Java.lang.NumberFormatException.forInputString(NumberFormatException.Java:65) ~[na:1.8.0_144]
Il me manque quelques annotations ?, Je crois comprendre que j’ai utilisé les annotations minimales requises pour une application de démarrage printanier. J’ai vu des messages similaires, mais je n’ai pas aidé. Aussi Essayé avec --spring.config.location .
Ma version de démarrage Spring: 1.3.6.RELEASE
Votre fichier de configuration ressemble plus à un application.properties
qu'à un application.yml
queue.size: 10
L'équivalent yml
devrait être:
queue:
size: 10
METTRE &AGRAVE; JOUR
Oui, les deux devraient fonctionner dans .yml
vous avez raison. J'ai reproduit exactement votre exemple et cela a fonctionné!
Assurez-vous simplement que votre fichier application.yml
se trouve à la racine du src/main/resources/
. J'ai eu la même erreur que le vôtre quand j'avais le fichier application.yml
dans un sous-répertoire, par exemple. src/main/resources/com/myapp/
Selon les informations actuelles que vous fournissez, je ne peux pas reproduire le problème. Voici donc quelques suppositions:
application.yml
sont corrects.Essayez d'utiliser Spring EL:
@Value("#{applicationConfig['queue.size']}")
Essayez le chargement de la propriété de débogage:
@Bean
public BlockingQueue<String> queue(ConfigurableEnvironment env) {
return new LinkedBlockingQueue<>(); // set breakpoint here, to see if env has your property in PropertySource: applicationConfig
}
Plus d'informations sur property source et yaml loading dans mon blog.
Si les suggestions ne vous aident pas, vous pouvez mieux
La section Externalized Configuration de la documentation Spring Boot explique tous les détails dont vous pourriez avoir besoin.
Selon votre exemple pour charger des propriétés dans la classe principale, vous pouvez faire quelque chose comme ceci,
Le contenu devrait ressembler à l'exemple suivant,
app: valeur1: 12 valeur2: chaîneValeur
Exemple de code,
package com.demo; importer org.springframework.boot.SpringApplication; importer org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.Environment; @ SpringBootApplication public class App {}public static void main( String[] args ){ SpringApplication app = new SpringApplication(App.class); Environment env = app.run(args).getEnvironment(); String value1 = env.getProperty("app.value1"); String value2 = env.getProperty("app.value2"); System.out.println("---------------- "+value1); System.out.println("---------------- "+value2); }