2015-05-14 38 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得到。