如何从application.properties中读取

时间:2017-12-05 08:19:09

标签: java spring spring-boot

我试图从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文件位于资源文件夹中。 我没有想法,请帮助。

1 个答案:

答案 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之外的其他数据类型。