配置类,
@Configuration
public class SpringContext {
@Bean
public BlockingQueue<String> queue(@Value("${queue.size}") int queueSize) {
return new LinkedBlockingQueue<>();
}
}
主要课程,
@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
启动主类时,我收到以下错误,
Caused by: java.lang.NumberFormatException: For input string: "${queue.size}"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_144]
我错过了一些注释?在我的理解中,我使用了Spring启动应用程序所需的最小注释。 我看过一些类似的帖子,但没有帮助。也 尝试使用 - spring.config.location 。
My Spring入门版: 1.3.6.RELEASE
答案 0 :(得分:3)
您的配置文件看起来更像application.properties
而不是application.yml
queue.size: 10
等效yml
应为:
queue:
size: 10
<强>更新强>
是的,两者都适用于.yml
你是对的。我完全复制了你的例子并且它有效!
确保application.yml
文件位于src/main/resources/
的根目录中。当我在子目录中有application.yml
文件时,我遇到了与您相同的错误,例如src/main/resources/com/myapp/
答案 1 :(得分:1)
Spring Boot文档的Externalized Configuration部分,解释了您可能需要的所有细节。
根据你的例子来加载主类中的属性,你可以做这样的事情,
内容应如下例所示,
app: value1: 12 value2: stringValue
示例代码,
package com.demo; import org.springframework.boot.SpringApplication; import 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); }
答案 2 :(得分:1)
根据您提供的当前信息,我无法重新产生问题,因此以下只是一些猜测:
application.yml
的文件名和文件位置是否正确; 尝试使用Spring EL:
@Value("#{applicationConfig['queue.size']}")
尝试调试属性加载:
@Bean
public BlockingQueue<String> queue(ConfigurableEnvironment env) {
return new LinkedBlockingQueue<>(); // set breakpoint here, to see if env has your property in PropertySource: applicationConfig
}
我的博客中有关property source and yaml loading的更多信息。
如果建议无效,您可能会更好