让 IntelliJ 知道属性文件

Posted

技术标签:

【中文标题】让 IntelliJ 知道属性文件【英文标题】:Make IntelliJ aware of a properties file 【发布时间】:2015-04-06 14:02:12 【问题描述】:

有没有办法告诉 IntelliJ 特定的 .properties 文件将被加载到项目的环境中?我们使用@PropertySource 注释来加载属性文件,并在多个地方从由已配置属性确定的文件中加载覆盖值,如下所示:

@Configuration
@PropertySource("classpath:com/example/package/db.properties")
@PropertySource("classpath:com/example/package/db.$db.instance.properties")
public class DatabaseConfig 
    private @Value("$db.someProperty") String someDBProperty;
    // ...

问题是在这些间接引用的文件之一中,例如db.test.properties,IntelliJ 不知道是否/如何引用属性文件,因此它无法将任何条目与它们的用法联系起来。 (奇怪的是,一些这些文件中列出的属性没有变灰以表示“未使用的属性”,尽管即使这些没有给出“查找用法”搜索的结果)。直接命名的文件没有问题,例如db.properties 以上。

除了创建引用它们的额外虚拟@Configuration 文件之外,有什么方法可以告诉 IntelliJ 这些文件?

【问题讨论】:

您找到解决方案了吗?与您的情况相反,当我在 Java 代码中使用 SpEL 时,属性始终标记为未使用。 【参考方案1】:

这就是我的做法:

在项目资源管理器中,我在 src/main/resources 中单击鼠标右键,将鼠标悬停在“将目录标记为...”,然后单击“资源根目录”

在 Spring 配置中,我只是直接指定属性文件的名称。

这是我在我的一个项目中执行此操作的示例: https://github.com/SFRJ/springpractice/blob/master/src/main/java/part3/PropertiesLoaderConfiguration.java

顺便说一句,如果您使用多个属性源,您还可以执行以下操作:

@PropertySources(
        @PropertySource("a.properties"),
        @PropertySource("b.properties")
    )

【讨论】:

感谢您的回答 sfrj,但我不确定这是否能回答问题 - 我想根据已加载的属性引用不同的属性源。例如。在我给出的示例中,我想加载特定数据库实例的配置,其中要使用的数据库实例已在其他地方配置(在我的情况下,它是根据正在运行的主机在应用程序启动时间查找的)。 Java 8 也不需要包装器 PropertySources 注释,它支持可重复的注释。 我的问题不同(更简单)。我想使用 Properties properties = null; 打开一个属性文件InputStream is = getClass().getClassLoader().getResourceAsStream("mysql.properties") properties.load(is);但 is 始终为空。 sfrj的回答解决了我的问题【参考方案2】:

这可以在项目结构中设置。看看这张截图。

【讨论】:

【参考方案3】:

在您的项目中创建一个名为res 的文件夹,并将必要的属性文件保存在该文件夹中。转到 Project_Structures -> Modules 并选择选项卡 Resources。在您的代码中,您可以使用以下路径访问资源文件:res/your_file_name

在将文件夹标记为资源文件夹之前

将文件夹标记为资源文件夹后

【讨论】:

以上是关于让 IntelliJ 知道属性文件的主要内容,如果未能解决你的问题,请参考以下文章

存储库中的文件阻止 IntelliJ 使用星形导入

让 IntelliJ IDEA 刷新项目并检测更改的文件

Intellij IDEA汉化教程

24.IntelliJ IDEA 常用设置-2

无法让 IntelliJ 识别 proto 编译的 Java 类文件

intellij,关闭属性的 ascii 处理