从jar读取外部配置文件

时间:2015-09-04 13:06:06

标签: java maven jar spring-boot

我正在构建一个需要读取外部属性文件的jar(使用Maven和Spring Boot)。它应该在正在运行的jar的同一目录中(或者在它的相对路径中,如./config.properties./conf/config.properties

现在我可以在资源目录中成功读取嵌入式jar,但如果我尝试从本地目录读取它,则InputStream将为null

我已经尝试将本地目录.添加到类路径中(解压jar我可以在Class-Path条目中看到它),但它没有用。

这就是我的尝试:

InputStream in = PropertiesLoader.class.getResourceAsStream("config.properties")
InputStream in = PropertiesLoader.class.getResourceAsStream("./config.properties")
InputStream in = PropertiesLoader.class.getClassLoader().getResourceAsStream("./config.properties")
InputStream in = PropertiesLoader.class.getClass().getResourceAsStream("./config.properties")

在我的pom.xml中,我有这个条目将本地目录添加到类路径中:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>bla.bla.Main</mainClass>
            </manifest>
            <manifestEntries>
                <Class-Path>.</Class-Path>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

我也尝试了user.dir属性但没有成功。

这应该是“容易的”,但我很遗憾。

2 个答案:

答案 0 :(得分:0)

Spring Boot可以为您完成所有繁重的读取属性文件,零配置。无需手动读取属性文件。有关详细信息,请参阅文档的this部分。

为了让您的生活尽可能轻松,我提出以下建议(实际上是Spring Boot默认策略):

application.properties中有一个src/resources文件,其中包含所有属性的默认值。 在将运行jar的环境中,将名为application.properties的文件放在与jar相同的目录中,或放在名为config的子目录中。

一旦这样做,每个属性都将通过@Value注释或@ConfigurationProperties类型处理在Spring Beans中提供。

另请注意,只要在运行jar时设置application.properties,就可以将属性文件命名为--spring.config.name=config以外的其他属性,例如java -jar somejar.jar --spring.config.name=config

答案 1 :(得分:0)

我在下面尝试过,它成功地运作了:

Properties properties = new Properties();
properties.load(new FileInputStream("./test/application.properties"));

或春天的方式

Properties properties = PropertiesLoaderUtils.loadProperties(new FileSystemResource("./test/application.properties"));

他们都做同样的技巧,第二个是安全的,所以你不需要关闭输入流。

诀窍是,您需要将test文件夹与src相同的级别进行创建,以使其与maven一起使用。因此,当你拥有jar时,你可以创建测试文件夹并将文件放入其中。

也作为一个罐子进行过测试。