2015-05-14 63 views
0

我是Java/Spring的新手,並試圖從文件中讀取屬性。這是我迄今爲止所做的。從Java中的文件讀取屬性Spring

Controller.java啓動應用程序:

import org.springframework.boot.*; 
import org.springframework.boot.autoconfigure.*; 

@EnableAutoConfiguration 
public class Controller { 
    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Controller.class, args); 
     Test test = new Test(); 
     test.doWork(); 
    } 

} 

這需要的Test.java的的doWork()方法:

import org.springframework.beans.factory.annotation.Value; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.context.annotation.PropertySource; 

@EnableAutoConfiguration 
@PropertySource("application.properties") 
public class Test { 

    @Value("${db.password}") 
    private String dbPassword; 

    public void doWork() { 
     System.out.println(dbPassword); 
    } 

} 

我把一些性質application.properties

db.password=Snap&Fudge! 

文件結構該項目的外觀如下所示:

./pom.xml 
./src/main/java/Controller.java 
./src/main/java/Test.java 
./src/main/resources/application.properties 

當我運行應用程序,我看到Test.doWork()運行,但不是打印出屬性,它返回null

你能看到我做錯了什麼嗎?

+0

您正在創建一個新的測試實例,而不是使用彈簧管理的實例。 –

回答

2

您正在創建一個新的測試實例,而不是使用Spring管理的實例。

首先改變你的Controller類。

@SpringBootApplication 
public class Controller { 
    public static void main(String[] args) throws Exception { 
     ApplicationContext ctx = SpringApplication.run(Controller.class, args); 
     Test test = ctx.getBean(Test.class); 
     test.doWork(); 
    } 
} 

Next改變你的Test類。

@Component 
public class Test { 

    @Value("${db.password}") 
    private String dbPassword; 

    public void doWork() { 
     System.out.println(dbPassword); 
    } 

} 

現在你將有一個Spring管理(和配置)的Test類的實例,你從ApplicationContext得到。