Ich erstelle eine Spring Boot-Anwendung und habe dieses Problem festgestellt.
Ich habe mein application.properties im Ressourcenordner, aber ich benötige auch die Datei external.properties außerhalb von jar, um Eigenschaften wie:
zu konfigurieren Name,
Passwort,
usw.
Ich möchte eine Datei external.properties außerhalb von jar und innerhalb des Ressourcenordners zum Testen während der Entwicklung haben.
Ich habe versucht, eine Konfigurationsdatei wie folgt zu erstellen:

@Configuration
 @PropertySource("classpath:" + SpringConfiguration.EXTERNALIZED_PROPERTIES)
 @PropertySource(value = "file:./" + 
 SpringConfiguration.EXTERNALIZED_PROPERTIES, ignoreResourceNotFound = true)
 public class SpringConfiguration {
       static final String EXTERNALIZED_PROPERTIES = "external.properties";
 }

Es werden jedoch weiterhin Eigenschaften aus dem Ressourcenordner gelesen. Wie kann ich es von außerhalb des Glases lesen lassen?

1
cuteBrick 18 Jän. 2019 im 14:35

5 Antworten

Beste Antwort

Die Lösung bestand darin, die Datei external.properties und die Konfigurationsdatei zu löschen. Und anstatt es zu verwenden, setzen Sie alle Eigenschaften auf application.properties. Und legen Sie application.properties in den Ordner mit jar. Spring priorisiert diese Eigenschaftendatei automatisch vor der Eigenschaftendatei in jar.

1
cuteBrick 24 Jän. 2019 im 10:26

Versuchen Sie, einen absoluten Systempfad als Wert des Attributs file: anzugeben.

Optional würde ich empfehlen, diesen absoluten Pfad zuerst als ENV-Variable festzulegen und dann diese Variable in file: zu verwenden:

@PropertySource("file:${EXTERNAL_RESOURCE_DIR}/application.properties") 

Wenn sich dieses Verzeichnis ändert, müssen Sie Ihren Code nicht ändern.

3
Maciej Kowalski 18 Jän. 2019 im 11:47

Ähnliche Antwort von Maciej Kowalski.

@PropertySources({
@PropertySource(value = {"classpath:application.properties"}, ignoreResourceNotFound = true),
@PropertySource(value = {"file:${external.config.location}/application.properties"}, ignoreResourceNotFound = true)

})

Angenommen, Sie haben im Ordner " / home / me / configs " die Datei " application.properties ".

Führen Sie die App mit einem benutzerdefinierten Ordner aus:

java -jar app.jar --external.config.location="/home/me/configs"

Oder

java -jar app.jar --external.config.location="C:\\users\\your_user\\configs"

Zusätzlich können Sie es als Umgebungsvariable (Unix) exportieren.

export JAVA_OPTS='-Dexternal_config_location=/home/me/configs'
2
Victor Dovgaliuc 18 Jän. 2019 im 13:48

Wenn Sie unterschiedliche Requisiten für Entwicklung und Produktion wünschen, verwenden Sie application-dev.properties und application-prod.properties und legen Sie beim Start das richtige Federprofil fest. Wenn Sie eine Eigenschaft aus dem JAR überschreiben müssen, fügen Sie einfach -Dmyproperty=myvalue zum Startbefehl hinzu

1
Nadir 18 Jän. 2019 im 11:45

Wenn Sie externe Eigenschaften hinzufügen müssen, können Sie diese nur in application.properties angeben.

Beispielsweise: myapplication.username='john'

Über den Spring-Boot-Code können Sie wie folgt darauf zugreifen:

 @Autowired  
 private Environment env;

//To access it
 String username = env.getProperty("myapplication.username");  

ODER

@Value("$myapplication.username")

Ich glaube nicht, dass eine externe Datei erforderlich ist, wenn Ihre Anforderung den von Ihnen genannten Anforderungen entspricht.

-1
iamrajshah 18 Jän. 2019 im 11:41