我创建了一个配置类,该类将存储配置值。这些配置值应从配置文件“ 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
文件。
我可能会在不考虑其他因素的情况下指定文件位置。我在这里想念什么?
答案 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}将被替换为其关联的值:
在任何文本编辑器(如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")