我是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
:
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();
}
}
接下来更改您的Test
课程。
@Component
public class Test {
@Value("${db.password}")
private String dbPassword;
public void doWork() {
System.out.println(dbPassword);
}
}
现在您将拥有Test
类的Spring托管(和配置)实例,您可以从ApplicationContext
获得该实例。