Spring boot external properties file in "current directory" is ignored

clickcell picture clickcell · Nov 30, 2016 · Viewed 17.8k times · Source

from the manual:

24.3 Application property files SpringApplication will load properties from application.properties files in the following locations and add them to the Spring Environment:

A /config subdirectory of the current directory.

The current directory

A classpath /config package

The classpath root

It mentions current directory twice but this really doesn't mean anything:

I tried putting it in the root of my project (i.e. above src in the folder that matches the output of java.io.File( "." ).getCanonicalPath() and System.getProperty("user.dir");), and I tried putting it with the war files (i.e. in build\libs)

But the only place to put it that actually works is the default location (src\main\resources).

So what does "current directory" even mean and where do the files really go?

I need to find the correct external location for the files so I don't have to build database credentials into the app.

The guides say that putting application.properties in current directory will work and I found the exact current directory to put it in but it still doesn't work, which I can verify by the output of: System.out.println(System.getProperty("spring.datasource.url")); which is null It does output the correct value only with an embedded properties file.

Answer

tan9 picture tan9 · Nov 30, 2016

According to ConfigFileApplicationListener:

// Note the order is from least to most specific (last one wins)
private static final String DEFAULT_SEARCH_LOCATIONS =
       "classpath:/,classpath:/config/,file:./,file:./config/";

file:./ resolve to the working directory where you start the java process.