让 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 知道属性文件的主要内容,如果未能解决你的问题,请参考以下文章