如何使用Spring Boot从java属性文件中读取数据

时间:2016-07-09 11:50:56

标签: java properties spring-boot

我有一个spring boot应用程序,我想从application.properties文件中读取一些变量。事实上,下面的代码就是这样做但我认为这种替代方法有一个很好的方法。

Properties prop = new Properties();
InputStream input = null;

try {
    input = new FileInputStream("config.properties");
    prop.load(input);
    gMapReportUrl = prop.getProperty("gMapReportUrl");
} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    ...
}

4 个答案:

答案 0 :(得分:30)

您可以使用@PropertySource将配置外部化为属性文件。有很多方法可以获得房产:

<强> 1。 使用@ValuePropertySourcesPlaceholderConfigurer一起分配属性值,以解析${}中的@Value

@Configuration
@PropertySource("file:config.properties")
public class ApplicationConfiguration {

    @Value("${gMapReportUrl}")
    private String gMapReportUrl;

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
        return new PropertySourcesPlaceholderConfigurer();
    }

}

<强> 2。 使用Environment

获取属性值
@Configuration
@PropertySource("file:config.properties")
public class ApplicationConfiguration {

    @Autowired
    private Environment env;

    public void foo() {
        env.getProperty("gMapReportUrl");
    }

}

希望这可以提供帮助

答案 1 :(得分:7)

我建议采用以下方式:

@PropertySource(ignoreResourceNotFound = true, value = "classpath:otherprops.properties")
@Controller
public class ClassA {
    @Value("${myName}")
    private String name;

    @RequestMapping(value = "/xyz")
    @ResponseBody
    public void getName(){
        System.out.println(name);
    }
}

这里你的新属性文件名是&#34; otherprops.properties&#34;并且属性名称是&#34; myName&#34;。这是在spring boot 1.5.8版中访问属性文件的最简单实现。

答案 2 :(得分:5)

我创建了以下课程

ConfigUtility.java

@Configuration
public class ConfigUtility {

    @Autowired
    private Environment env;

    public String getProperty(String pPropertyKey) {
        return env.getProperty(pPropertyKey);
    }
} 

并按如下所述获取application.properties值

myclass.java

@Autowired
private ConfigUtility configUtil;

public AppResponse getDetails() {

  AppResponse response = new AppResponse();
    String email = configUtil.getProperty("emailid");
    return response;        
}

application.properties

emailid=sunny@domain.com

已测试单元,按预期运行...

答案 3 :(得分:1)

我们可以使用3种方式在spring boot中读取属性文件

1。使用@Value

从application.properties中读取值

地图键为

public class EmailService {

 @Value("${email.username}")
 private String username;

}

2。使用@ConfigurationProperties从application.properties中读取值

在这种情况下,我们将使用ConfigurationProperties映射密钥的前缀,并且密钥名称与类的字段相同

  @Component
   @ConfigurationProperties("email")
    public class EmailConfig {

        private String   username;
    }

3。使用环境对象阅读application.properties

公共类EmailController {

@Autowired
private Environment env;

@GetMapping("/sendmail")
public void sendMail(){     
    System.out.println("reading value from application properties file  using Environment ");
    System.out.println("username ="+ env.getProperty("email.username"));
    System.out.println("pwd ="+ env.getProperty("email.pwd"));
}

参考:how to read value from application.properties in spring boot