Das Problem ist, dass der Frühling/Feder-Boot lädt die ganze Feder Kontext, wenn es „gebootet“:
Um die Ausführung von Batch-Skripten gesetzt zu verhindern. Dies bedeutet, dass während dieser Boot-Phase alle definierten Spring-Beans in den Feder-Kontext geladen werden. Bei Spring-Batch bedeutet dies auch, dass die Datenquellen-Bean geladen ist, und falls nicht durch "spring.batch.initializer.enabled = false" ausgeschaltet, werden die Spring-Batch-Tabellen initialisiert.
Im Allgemeinen können Sie dies nicht verhindern, sobald Sie Ihren Spring-Batch-Starter zu Ihren Abhängigkeiten hinzugefügt haben.
Darüber hinaus verstehe ich nicht, warum Sie dies verhindern möchten. Es findet gerade eine Initialisierung statt, und sofern alles richtig konfiguriert ist, sollte dies kein Problem sein.
Wenn Sie jedoch wirklich verhindern möchten, dass die Datenquelle initialisiert wird, können Sie den folgenden Ansatz versuchen. Ich weiß jedoch nicht, ob das funktioniert.
Spring-Batch benötigt eine Datenquelle, die im Spring-Kontext unter dem Namen "dataSource" registriert ist. Wenn keine Frühlingsbohne mit diesem Namen gefunden wird, erzeugt sie ihre eigene. Wenn Sie jedoch eine eigene Implementierung/Konfiguration dafür bereitstellen, wird Ihre Spring Bean verwendet.
Was Sie tun müssen, ist, einen Proxy für eine Datenquelle zu schaffen, die sich träge geladen und registrieren sie dann unter dem Namen „datasource“ im Kontext:
Aber - und lassen Sie mich betonen, dass - das nichts, was ich empfehlen würde und ich sehe keinen guten Grund, warum dies notwendig sein sollte.
Darüber hinaus erwähnen Sie, dass Sie nur laden wollen "initial static index page" (ich nehme an, Sie sprechen über HTML, oder?). Allerdings sehe ich keinen "Batch" Anwendungsfall, der HTML-Seiten anzeigen sollte. Es wäre wahrscheinlich besser, zwei verschiedene Anwendungen in diesem Fall zu haben.
Wahrscheinlich könnten Sie weitere Informationen zu Ihrem Anwendungsfall bereitstellen.
Auch versucht, spring.batch.initialize.enabled = false – Sam
Sie können nicht. Eine 'DataSource' wird erstellt sobald sie referenziert wird. Die Eigenschaft 'initialize' stoppt nur die Erstellung der Tabellen und nicht den Start von 'DataSource' selbst. –