[英]Cannot load values from application.properties in a spring boot service
[英]Spring : Cannot get value from application.properties
我通過 Spring Initializr 創建了 Spring 項目,項目結構如下:
我在 application.properties 文件中定義了屬性:
my.prop=testvalue
我將這個值注入到 MyClass 中,如下所示:
@Component
class MyClass {
@Value("${my.prop}")
private String myProp;
public String getMyProp() {
return myProp;
}
}
ConfigBeans 定義如下:
package com.example.propertiesdemo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConfigBeans {
@Bean
public MyClass myLitoBean() {
return new MyClass();
}
}
屬性demoApplication.java:
package com.example.propertiesdemo;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@SpringBootApplication
public class PropertiesdemoApplication {
public static void main(String[] args) {
ApplicationContext context
= new AnnotationConfigApplicationContext(
ConfigBeans.class);
MyClass myClass = context.getBean(MyClass.class);
System.out.println(myClass.getMyProp());
}
}
我期待在執行行 System.out.println(myClass.getMyProp()); 之后將打印 application.properties 中定義的 myprop 值(即 testvalue),但運行后(通過 Netbeans IDE)我得到輸出:
${my.prop}
這段代碼中遺漏了什么? 提前致謝
您正在創建MyClass
bean 兩次。
@component
注解@bean
注釋(使用方法名稱 lowerCamelCase 即在您的情況下為myClass()
)使用上述任何一種方法僅創建一次 bean。
您不需要像這樣在 main 方法中創建應用程序上下文。 呈現的代碼是一種“傳統”彈簧和彈簧靴的混合體。 所以你有點繞過了 spring boot 提供的所有好東西,其中包括自動application.properties
加載。
如果您使用的是 spring boot(有一個@SpringBootApplication
注釋),那么它將自行創建所有內容。
通常它應該是這樣的
public static void main(String[] args) {
SpringApplication.run(PropertiesdemoApplication.class, args);
}
是的,正如 Navnath Adsul 所說,您需要創建一次 bean,而且,由於您使用的是 Spring Boot,因此需要使用特殊方法來提升上下文
@SpringBootApplication
public class PropertiesdemoApplication implements CommandLineRunner {
// Inject Bean
@Autowired
private MyClass myClass;
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(PropertiesdemoApplication.class)
.run(args);
// or SpringApplication.run(PropertiesdemoApplication.class, args);
}
@Override
public void run(String[] args) throws Exception {
System.out.println(myClass.getMyProp());
}
}
@SpringBootApplication
public class PropertiesdemoApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(PropertiesdemoApplication.class, args);
MyClass myClass = context.getBean(MyClass.class);
System.out.println(myClass.getMyProp());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.