2015-02-06 5 views
5

Gibt es eine Möglichkeit, IntelliJ mitzuteilen, dass eine bestimmte .properties Datei in die Projektumgebung geladen wird? Wir verwenden @PropertySource Anmerkungen Eigenschaften Dateien zu laden, und an mehreren Stellen laden Korrekturwerte aus einer Datei durch eine bereits konfigurierte Eigenschaft bestimmt, etwa so:IntelliJ auf eine Eigenschaftendatei aufmerksam machen

@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; 
    // ... 
} 

Das Problem ist, dass innerhalb eines dieser indirekt referenzierten Dateien, z.B. db.test.properties, IntelliJ weiß nicht, ob/wie die Eigenschaftendatei referenziert ist, daher kann sie keinen der Einträge mit ihren Verwendungen verknüpfen. (Bizarr, einige der Eigenschaften in diesen Dateien aufgeführt sind nicht ausgegraut, um 'Unused Eigenschaft' anzuzeigen, obwohl auch diese keine Ergebnisse für eine 'Suchen Verwendungen' Suche). Es gibt kein Problem mit direkt benannten Dateien, z. db.properties oben.

Gibt es eine Möglichkeit, IntelliJ über diese Dateien zu informieren, bevor Sie zusätzliche Dummy @Configuration Dateien erstellen, die auf sie verweisen?

+0

Haben Sie jemals eine Lösung gefunden? Im Gegensatz zu Ihrer Situation, wenn ich SPEL in meinem Java-Code verwende, werden die Eigenschaften immer als unbenutzt markiert. –

Antwort

2

Dies ist, wie ich es tun:

  • Aus dem Projekt-Explorer-i in src/main/resources rechts klicken, schwebe ich auf "Mark-Verzeichnis unter ..." und ich auf „Ressourcen Wurzel "

enter image description here

  • im Frühjahr Konfiguration I geben Sie einfach den Namen der Eigenschaften-Datei direkt.

Hier ist ein Beispiel, wenn ich dies in einem meiner Projekte tue: https://github.com/SFRJ/springpractice/blob/master/src/main/java/part3/PropertiesLoaderConfiguration.java

By the way, wenn Sie mehrere Eigenschaft Quellen verwenden, können Sie auch etwas tun:

@PropertySources({ 
     @PropertySource("a.properties"), 
     @PropertySource("b.properties") 
    }) 
+0

Danke für Ihre Antwort sfrj, ich bin mir nicht sicher, ob dies die Frage beantwortet - ich möchte auf verschiedene Eigenschaftenquellen verweisen, abhängig von einer Eigenschaft, die bereits geladen wurde. Z.B. Im Beispiel gab ich an, wo ich die Konfiguration für eine bestimmte Datenbankinstanz laden möchte, wo die zu verwendende DB-Instanz an anderer Stelle konfiguriert wurde (in meinem Fall wird sie abhängig vom laufenden Host zum Zeitpunkt des Starts der Anwendung gesucht). – yjo

+0

Auch die Wrapper-Annotation PropertySources wird nicht von Java 8 benötigt, das wiederholbare Annotationen unterstützt. – yjo

+0

Mein Problem war anders (einfacher). Ich wollte eine Eigenschaftendatei öffnen mit Eigenschaften properties = null; InputStream ist = getClass(). GetClassLoader(). GetResourceAsStream ("mysql.properties") properties.load (is); aber war immer Null. sfrj's Antwort löste mein Problem –