【发布时间】:2019-03-27 05:13:40
【问题描述】:
我是 Spring Boot 的新手并使用 Spring Annotations。我正在尝试构建一个示例 Spring Boot 应用程序,在其中我使用属性文件为我的 java 属性获取一个值。我正在尝试使用 @Component 和 @ConfigurationProperties 参数。我在网上看了一堆教程,这StackOverflow article 帮助了,但我的财产价值仍然是null
这是我的代码。
浏览过:-
unable to read properties using configurationproperties annotation
https://www.mkyong.com/spring/spring-propertysources-example/
我的 SpringBoot 应用类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@EnableAutoConfiguration
@SpringBootApplication
public class Main {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Main.class, args);
TestConf t = context.getBean(TestConf.class);
System.out.println(t.toString());
}
}
TestConf 类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties("pres")
public class TestConf {
private String firstName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public TestConf()
{
System.out.println("inside constructor");
System.out.println("first name:" + firstName);
}
public static void main(String[] args){
TestConf t = new TestConf();
}
@Override
public String toString() {
return "firstName:" + firstName;
}
}
application.properties
pres.firstName=JACQUELYN
最后是我的 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>phil</groupId>
<artifactId>springTuit</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.2.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- Optional, for bootstrap -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>4.3.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Package as an executable jar/war -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins>
</build>
</project>
将application.properties 中的值正确检索到firstName 中缺少什么?
我的application.properties 文件在哪里重要吗?虽然它位于src/main/resources 下的传统位置,而我的java 文件位于src/main/java 下
【问题讨论】:
-
您必须指定它的位置,因为您要移动到默认位置。 Spring boot 总是在资源文件夹下寻找属性文件。要更改您可以使用此属性
--spring.config.location="file:/path/to/application.properties" -
如果你检查,
firstName在TestConf的构造函数上只会是null,并且在main类中的main方法上打印正常 -
另外,为什么
TestConf类中有main方法?
标签: java spring spring-boot spring-annotations