我试图从application.properties中读取内容,但我无法正常工作。
这是我的代码:
package config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
@Configuration
@PropertySource("classpath:application.properties")
public class PropertiesReader {
@Autowired
private Environment env;
public String readProperty(String key) {
return env.getProperty(key);
}
}
这是我调用readProperty的地方:
public class JwtSettings {
public String key;
public long expiration;
//The JWT signature algorithm we will be using to sign the token
public SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
public JwtSettings() {
PropertiesReader propertiesReader = new PropertiesReader();
key = propertiesReader.readProperty(ApplicationProperties.JWT_KEY.key);
}
当我运行此代码时,env实例为null。 我的application.properties文件位于资源文件夹中。 我没有想法,请帮助。
答案 0 :(得分:0)
尝试使用您的配置:
@Service
public class JwtSettings {
private String key;
private long expiration;
//The JWT signature algorithm we will be using to sign the token
public SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
@Autowired
public JwtSettings(PropertiesReader propertiesReader) {
this.key = propertiesReader.readProperty(ApplicationProperties.JWT_KEY.key);
}
}
您永远不应该自己实例化Spring托管组件(通过调用代码中的构造函数)。相反,您应该通过@Autowired
使用Spring Dependency-Injection来确保正确解析所有依赖项。
使用Spring注入属性(通常):
如果您尝试从属性资源访问属性值,请尝试使用Springs @Value
注释注入它。
您的application.properties可能如下所示:
myproperty.test1=mytestvalue
myproperty.test2=123
现在你有了一个Spring组件,你想要使用属性值,你可以像下面那样注入它们:
@Component
private class MyTestComponent {
@Value("${myproperty.test1:mydefaultvalue}")
private String test1Value;
@Value("${myproperty.test2:-1}")
private int test2Value;
}
当然,您可以使用除String之外的其他数据类型。