【问题标题】:Make IntelliJ aware of a properties file让 IntelliJ 知道属性文件
【发布时间】: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 时,属性始终标记为未使用。

标签: java spring intellij-idea properties-file


【解决方案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

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 2018-04-15
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      相关资源
      最近更新 更多