如何使用SpringBoot PropertySource从外部配置文件读取

时间:2018-09-08 15:25:30

标签: java spring-boot configuration-files

我创建了一个配置类,该类将存储配置值。这些配置值应从配置文件“ config.properties”中读取。下面是配置类:

@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);
    }

}

以下是config.properties文件的内容:

myFirstName=John    
myLastName=Doe

运行我的程序应该只打印这些变量的值。但是,相反,Eclipse告诉我,即使我指定它位于config.properties中,它也找不到/src/main/java/config.properties文件。

我可能会在不考虑其他因素的情况下指定文件位置。我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

您正在使用的位置(file:/src/main/java/config.properties)指的是绝对路径,而不是相对于项目宿主的路径。

更常见的方法是将config.properties作为项目的一部分运送到资源目录中,并通过类路径进行引用。如果将其移至/src/main/resources/config.properties,则可以通过以下方式加载它:

@PropertySource("classpath:config.properties")

我相信理论上您可以将其保留在/src/main/java中,并将您的@PropertySource位置更改为上面的位置,但是将其移动到/resources是更惯用的方法

答案 1 :(得分:1)

指定file:位置以指定位于主机环境中其他位置的属性文件的基本方法是:

@PropertySource("file:/path/to/application.properties")
  • 请注意,/path/to/application.properties应该是指向.properties文件的绝对路径(在您的示例中,您将file:的用法和相对路径混合使用了) )

还可以指定系统属性环境变量,在应用程序启动时将其解析为实际值。例如,当Spring应用程序启动时,下面的$ {CONF_DIR}将被替换为其关联的值:

  1. 在任何文本编辑器(如nano或gedit)中打开/ etc / environment并添加以下行:

    CONF_DIR=/path/to/directory/with/app/config/files
    
  2. 检查是否已设置系统变量:

    echo $CONF_DIR
    /path/to/directory/with/app/config/files
    
  3. 像下面那样使用PropertySource:

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