从Java Spring中读取文件中的属性

时间:2015-05-14 12:17:43

标签: 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

你能看出我做错了吗?

1 个答案:

答案 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();
    }
}

接下来更改您的Test课程。

@Component 
public class Test {

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

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

}

现在您将拥有Test类的Spring托管(和配置)实例,您可以从ApplicationContext获得该实例。