如何使用 Spring Boot PropertySource 读取外部配置文件
How to use SpringBoot PropertySource to read from an external configuration file
我创建了一个配置 class 来存储配置值。这些配置值应该从配置文件“config.properties
”中读入。下面是配置 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);
}
}
下面是 config.properties
文件的内容:
myFirstName=John
myLastName=Doe
运行 我的程序应该简单地打印这些变量的值。但是相反,Eclipse 告诉我它找不到 config.properties
文件,即使我指定它位于 /src/main/java/config.properties
中。
我可能会在不考虑其他因素的情况下指定文件位置。我在这里错过了什么?
您使用的位置 (file:/src/main/java/config.properties
) 是指绝对路径,而不是相对于您的项目主页的路径。
一种更常见的方法是将 config.properties
作为资源目录中项目的一部分发布,并通过类路径引用它。如果你把它移动到/src/main/resources/config.properties
,你可以这样加载它:
@PropertySource("classpath:config.properties")
我相信理论上你可以将它留在 /src/main/java
并将你的 @PropertySource
位置更改为我上面的位置,但是将它移动到 /resources
是更惯用的方式这样做。
指定 file:
位置以指定位于主机环境其他位置的属性文件的基本方法是:
@PropertySource("file:/path/to/application.properties")
- 请注意,
/path/to/application.properties
应该是指向您的 .properties
文件的绝对路径(在您的示例中,您混合了 file:
用法和 相对路径 这是不正确的 )
也可以指定一个系统属性或一个环境变量,它们将被解析为它的实际值当您的应用程序启动时。例如,下面的 ${CONF_DIR} 将在 Spring 应用程序启动时替换为其关联的值:
在任何文本编辑器(如 nano 或 gedit)中打开 /etc/environment 并添加以下行:
CONF_DIR=/path/to/directory/with/app/config/files
检查是否设置了系统变量:
echo $CONF_DIR
/path/to/directory/with/app/config/files
像这样使用 PropertySource:
@PropertySource("file:${CONF_DIR}/application.properties")
我创建了一个配置 class 来存储配置值。这些配置值应该从配置文件“config.properties
”中读入。下面是配置 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);
}
}
下面是 config.properties
文件的内容:
myFirstName=John
myLastName=Doe
运行 我的程序应该简单地打印这些变量的值。但是相反,Eclipse 告诉我它找不到 config.properties
文件,即使我指定它位于 /src/main/java/config.properties
中。
我可能会在不考虑其他因素的情况下指定文件位置。我在这里错过了什么?
您使用的位置 (file:/src/main/java/config.properties
) 是指绝对路径,而不是相对于您的项目主页的路径。
一种更常见的方法是将 config.properties
作为资源目录中项目的一部分发布,并通过类路径引用它。如果你把它移动到/src/main/resources/config.properties
,你可以这样加载它:
@PropertySource("classpath:config.properties")
我相信理论上你可以将它留在 /src/main/java
并将你的 @PropertySource
位置更改为我上面的位置,但是将它移动到 /resources
是更惯用的方式这样做。
指定 file:
位置以指定位于主机环境其他位置的属性文件的基本方法是:
@PropertySource("file:/path/to/application.properties")
- 请注意,
/path/to/application.properties
应该是指向您的.properties
文件的绝对路径(在您的示例中,您混合了file:
用法和 相对路径 这是不正确的 )
也可以指定一个系统属性或一个环境变量,它们将被解析为它的实际值当您的应用程序启动时。例如,下面的 ${CONF_DIR} 将在 Spring 应用程序启动时替换为其关联的值:
在任何文本编辑器(如 nano 或 gedit)中打开 /etc/environment 并添加以下行:
CONF_DIR=/path/to/directory/with/app/config/files
检查是否设置了系统变量:
echo $CONF_DIR /path/to/directory/with/app/config/files
像这样使用 PropertySource:
@PropertySource("file:${CONF_DIR}/application.properties")