2017-02-01 2 views
1

Wir haben eine Feder Boot-Anwendung, die ein Vermächtnis jar api hat, die wir verwenden, die Eigenschaften laden muss InputFileStream unter Verwendung. Wir haben das Legacy-Glas in unser Spring-Boot-Fettglas verpackt und die Eigenschaftendateien befinden sich im Ordner BOOT-INF/classes. Ich konnte Spring sehen, der alle relevanten Eigenschaften lädt, aber, wenn ich den Eigenschaftendateinamen dem Legacy-Jar übergebe, konnte es die Eigenschaftendatei nicht lesen, wie es innerhalb des Glases ist und nicht unter physikalischem Weg ist. Wie übergeben wir in diesem Szenario die Eigenschaftendatei an das Legacy-Jar?Lese Datei im Frühjahr Boot Fett jar

Bitte beachten Sie, wir können nicht das Erbe jar ändern.

+0

Was bedeutet die API in der Legacy-jar Sie hinein passieren lassen? Können Sie einen InputStream übergeben oder braucht er nur einen String, den er als Dateisystempfad interpretiert? –

+0

Ja, das Legacy-Jar erlaubt mir nur, einen String zu übergeben, der der Dateipfad ist. – lsiva

Antwort

0

Grundsätzlich kann man nicht, weil die Eigenschaften „Datei“ nicht eine Datei ist, es ist eine Ressource in einer JAR-Datei, die komprimiert wird (es ist eigentlich eine ZIP-Datei).

AFAIK, der einzige Weg, um diese Arbeit zu machen, ist die Datei aus dem Glas zu extrahieren, und legen Sie sich auf Ihrem Server in einem bekannten Standort. Öffnen Sie dann zur Laufzeit diese Datei mit einem FileInputStream und übergeben Sie sie an die Legacy-Methode.

+0

Wir wollten die Anwendung als einen fetten Krug bereitstellen und als eigenständiges Programm ausführen. Gibt es einen Weg, dies zu erreichen? – lsiva

+0

Die einzige Lösung, die ich denken kann, ist die Datei zur Laufzeit zu bekommen, als INPUTSTREAM- über getResourceAsStream, in eine Datei schreiben (als temporäre Datei?), Dann mit einem Fileinputstream öffnen – GreyBeardedGeek

+0

ich diesen Ansatz zu lassen versuchen . – lsiva

1

Eigentlich kann man unter Verwendung von FileSystem. Sie müssen nur ein Dateisystem in dem Ordner emulieren, von dem Sie die Datei beziehen müssen. Wenn Sie zum Beispiel file.properties, die unter src/main/resources bekommen wollte konnte man so etwas tun:

FileSystem fs = FileSystems.newFileSystem(this.getClass().getResource("").toURI(), Collections.emptyMap()); 
String pathToMyFile = fs.getPath("file.properties").toString(); 
yourLegacyClassThatNeedsAndAbsoluteFilePath.execute(pathToMyFile) 
Verwandte Themen