如何在没有环境变量的情况下读取application.properties文件

时间:2017-06-12 12:19:58

标签: java spring spring-boot

请帮助我在spring boot中从application.properties文件中读取属性,而不使用Autowiring the Environment变量并且不使用Environment变量。

也不需要使用$ {propname}。我可以创建属性对象但必须传递我的属性文件路径。我想从另一个地方获取我的道具文件。

谢谢, Braj

7 个答案:

答案 0 :(得分:7)

这是Java的核心功能。如果您不想使用,则不必使用任何Spring或Spring Boot功能。

Properties properties = new Properties();
try (InputStream is = getClass().getResourceAsStream("application.properties")) {
  properties.load(is);
}

JavaDoc:http://docs.oracle.com/javase/8/docs/api/java/util/Properties.html

答案 1 :(得分:1)

要阅读application.properties,只需将此注释添加到您的班级:

@ConfigurationProperties
public class Foo { 
}

如果要更改默认文件

@PropertySource("your properties path here")
public class Foo { 
}

答案 2 :(得分:1)

尝试使用普通的Properties

final Properties properties = new Properties();
properties.load(new FileInputStream("/path/config.properties"));
System.out.println(properties.getProperty("server.port"));

如果您需要在配置中使用该外部属性文件,可以使用@PropertySource("/path/config.properties")

完成

答案 3 :(得分:1)

OrangeDog解决方案对我不起作用。它生成了NullPointerException。

我找到了另一个解决方案:

<div id="button">
</div>

答案 4 :(得分:1)

如果其他所有设置均正确,则可以注释@Value。 Springboot将负责从属性文件中加载值。

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.beans.factory.annotation.Value;

@Configuration
@PropertySource("classpath:/other.properties")
public class ClassName {
  @Value("${key.name}")
  private String name;
}

答案 5 :(得分:0)

添加到Vladislav Kysliy的优雅解决方案中,可以将以下代码直接插入为REST API调用,以在不知道任何键的情况下获取Spring Boot中application.properties文件的所有键/值。此外,如果您知道Key,则可以随时使用@Value批注来查找值。

@GetMapping
@RequestMapping("/env")
public java.util.Set<Map.Entry<Object,Object>> getAppPropFileContent(){
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    java.util.Properties properties = new java.util.Properties();
    try(InputStream resourceStream = loader.getResourceAsStream("application.properties")){
        properties.load(resourceStream);
    }catch(IOException e){
        e.printStackTrace();
    }
    return properties.entrySet();
}

答案 6 :(得分:0)

以下代码从现有的application.properties文件中提取环境值,该文件位于WEB-INF / classes下的Deployed Resources中:

    // Define classes path from application.properties :
    String environment;
    InputStream inputStream;
    try {
        // Class path is found under WEB-INF/classes
        Properties prop = new Properties();
        String propFileName = "com/example/project/application.properties";

        inputStream = getClass().getClassLoader().getResourceAsStream(propFileName);
        // read the file
        if (inputStream != null) {
            prop.load(inputStream);
        } else {
            throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
        }

        // get the property value and print it out
        environment = prop.getProperty("environment");

        System.out.println("The environment is " + environment);
    } catch (Exception e) {
        System.out.println("Exception: " + e);
    }
Output:

The environment is Test