Wir hatten ein ähnliches Problem auf unserem Test-Server. Sieht aus wie ein Problem mit Dateiberechtigungen, d. H. Spring Batch Admin versucht, eine Verzeichnisstruktur für "target/config" zu erstellen, aber der Benutzer darf die Verzeichnisse nicht erstellen.
Dies ist die Kette das Problem verursacht:
META-INF/spring/batch/bootstrap/integration/configuration-context.xml
enthält die Definition eines verweisenden Datei poller auf die Eigenschaft:
<file:inbound-channel-adapter directory="${batch.job.configuration.file.dir}" channel="job-configuration-files"
filename-pattern=".*\.xml">
<poller max-messages-per-poll="1" cron="5/1 * * * * *" />
</file:inbound-channel-adapter>
die Dokumentation der Inbound-Kanal-Adapter Überprüfung ergibt folgendes Bild (Feder-Integration-file-2.1.xsd):
<xsd:attribute name="directory" type="xsd:string" use="required">
<xsd:annotation>
<xsd:documentation><![CDATA[Specifies the input directory (The directory to poll from) e.g.:
directory="file:/absolute/input" or directory="file:relative/input"]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
und()
0123!
<xsd:attribute name="auto-create-directory" type="xsd:string" default="true">
<xsd:annotation>
<xsd:documentation>
Specify whether to automatically create the source directory if it does not yet exist when this
adapter is being initialized. The default value is 'true'. If set to 'false' and the directory
does not exist upon initialization, an Exception will be thrown.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
Als Ergebnis ist auto-create-directory
wahr und Spring versucht, die (relative) Verzeichnisstruktur irgendwo auf dem Shell-Pfad Ihres Servers zu erstellen.
Für die Fehlermeldung gibt die Java-Klasse Überprüfung org.springframework.integration.file.FileReadingMessageSource
die Erklärung:
if (!this.directory.exists() && this.autoCreateDirectory) {
this.directory.mkdirs();
}
Assert.isTrue(this.directory.exists(),
"Source directory [" + directory + "] does not exist.");
Die javadoc von java.io.File.mkdirs()
sagt:
public boolean mkdirs()
Creates the directory named by this abstract pathname, including any necessary but nonexistent parent directories. Note that if this operation fails it may have succeeded in creating some of the necessary parent directories.
Returns:
true if and only if the directory was created, along with all necessary parent directories; false otherwise
Also, was ist passiert, die mkdirs() gibt „false "weil er das Verzeichnis nicht erstellen konnte. Das folgende exists() gibt auch "false" zurück und gibt die Fehlermeldung zurück, die im ursprünglichen Post angegeben wurde.
Sie können umgehen, indem Sie den Parameter auf ein vorhandenes und schreibbares Verzeichnis wie "/ tmp" setzen, indem Sie einen absoluten Pfad verwenden. Leider weiß ich nicht, wie diese Spring-Batch-Funktion funktionieren sollte, wenn Sie Ihre Jobdefinitionen auf einem Klassenpfad speichern. es wäre sinnvoller, keinen Datei-Poller zu verwenden, sondern einen "Klassenpfad-bewussten" Datei-Poller zu verwenden ...
Ich habe versucht, die Datei "batch.job.configuration.file.dir" in ein Verzeichnis auf dem lokalen Rechner zu setzen sogar zur Verzeichnisstruktur im Klassenpfad, aber es hat nicht geholfen – vaibhav