简体   繁体   中英

How to use SpringBoot PropertySource to read from an external configuration file

I've created a configuration class that will store configuration values. These configuration values should be read in from a configuration file " config.properties ". Below is the config class:

@Configuration
@ComponentScan(basePackages = {"com.boot.Training.*"})
@PropertySource("file:/src/main/java/config.properties")
public class AppConfig {

    @Value("${myFirstName}")
    private static String myFirstName;

    @Value("${myLastName}")
    private static String myLastName;

    public static void showVariables() {
        System.out.println("firstName: " + myFirstName);
        System.out.println("lastName: " + myLastName);
    }

}

And below are the contents of the config.properties file:

myFirstName=John    
myLastName=Doe

Running my program should simply print the values of these variables. But instead, Eclipse tells me it cannot find the config.properties file, even though I specified that it is located in /src/main/java/config.properties .

I'm likely specifying the file location without taking something else into account. What am I missing here?

The location you are using ( file:/src/main/java/config.properties ) refers to an absolute path rather than one relative to your project home.

A more common way to do this is to ship config.properties as part of your project in a resources directory, and refer to it via the classpath. If you move it to /src/main/resources/config.properties , you can load it this way:

@PropertySource("classpath:config.properties")

I believe in theory you could just leave it in /src/main/java and change your @PropertySource location to what I have above, but moving it to /resources is the more idiomatic way of doing this.

The basic way to specify a file: location to appoint a properties file that is located elsewhere on your host environment is:

@PropertySource("file:/path/to/application.properties")
  • Note that /path/to/application.properties should be absolute path pointing to your .properties file (in your example you are mixing file: usage and relative path which is not correct )

it is also possible to specify a system property or an environment variable that will be resolved to its actual value when your application starts. For example, ${CONF_DIR} below will be replaced with its associated value when the Spring application starts:

  1. Open /etc/environment in any text editor like nano or gedit and add the following line:

     CONF_DIR=/path/to/directory/with/app/config/files 
  2. Check it system variable has been set:

     echo $CONF_DIR /path/to/directory/with/app/config/files 
  3. use PropertySource like:

     @PropertySource("file:${CONF_DIR}/application.properties") 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM