Die Angabe relativen Pfad in der Anwendung.Eigenschaften im Frühjahr
Ist es so, dass wir Ressourcen-lookup-Datei mit relativem Pfad in der Anwendung.Eigenschaften Datei im Spring-boot-Anwendung wie unten angegeben
spring.datasource.url=jdbc:hsqldb:file:${project.basedir}/db/init
InformationsquelleAutor Somasundaram Sekar | 2016-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mit spring boot zu bauen, ein upload-Beispiel, und das gleiche problem, ich will nur, um die Projekt-root-Pfad. (z.B. /sring-boot-upload)
Finde ich heraus, dass der code unten funktioniert:
InformationsquelleAutor chendu
@membersound Antwort ist einfach Aufbrechen der hartcodierten Pfad in 2 Teile, nicht dynamisch auflösen der Eigenschaft. Ich kann Ihnen sagen, wie Sie das erreichen, was Sie suchen, aber Sie verstehen müssen ist, dass es KEINE
project.basedir
wenn Sie die Anwendung als jar-oder war. Außerhalb der lokalen Arbeitsbereich, der source code Struktur nicht vorhanden ist.Wenn Sie immer noch wollen, dies zu tun für die Prüfung, das ist machbar und was Sie brauchen, ist zum Bearbeiten der
PropertySource
s. Ihre einfachste Wahl ist wie folgt:Definieren
ApplicationContextInitializer
, und setzen Sie die Eigenschaft dort. So etwas wie die folgenden:Sieht aus wie du bist mit Boot, so können Sie einfach erklären
context.initializer.classes=com.example.MyApplicationContextInitializer
in Ihremapplication.properties
und Booten ausgeführt wird diese Klasse beim Start.Worte der Vorsicht wieder:
Funktioniert dies nicht außerhalb des lokalen Arbeitsbereichs abhängig von der source code Struktur.
Ich bin davon ausgegangen ein Gradle-Projekt-Struktur hier
/build/classes/main
. Falls erforderlich, passen Sie nach Ihren build-tool.Wenn
MyApplicationContextInitializer
ist in dersrc/test/java
,pwd
wird<projectBasedir>/build/classes/test/
, nicht<projectBasedir>/build/classes/main/
.InformationsquelleAutor Abhijit Sarkar
Erhalten
java.lang.IllegalArgumentException: Could not resolve placeholder 'basedir' in string value "jdbc:hsqldb:file:${basedir}/db/init"
so haben Sie eine variable vor der Verwendung deklariert namens
basedir=...
? als sollte es funktionieren. natürlich muss es deklariert werden, vor der Wiederverwendung der placehodler.Dies ist nur das Aufbrechen der hartcodierten Pfad in 2 Teile. Was der OP sucht, ist eine Eigenschaft, die das Boot auflösen kann, nicht das, was ein Benutzer konfiguriert.
InformationsquelleAutor membersound