2016-06-04 4 views
1

Ich arbeite an Spring Boot und Batch-Anwendung. Aufgrund des Stapels versucht die Anwendung, eine Verbindung zur Datenquelle mit spring-boot:run herzustellen. Ich mag, dass stoppen und versuchte spring.datasource.initialize=falseSpring.datasource.initialize = false funktioniert nicht

zusammen mit diesem auch spring.batch.job.enabled=false setzen

Während der zweiten funktioniert gut, es scheint die erste ignoriert.

Könnte jemand mich wissen lassen, wenn es eine Möglichkeit gibt, db Verbindung beim Start zu stoppen? Vielen Dank im Voraus

+0

Auch versucht, spring.batch.initialize.enabled = false – Sam

+0

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. –

Antwort

0

Wie ich verstehe, möchten Sie Datenbankverbindung während des Anwendungsstarts nicht verhindern.

Stattdessen möchten Sie die Ausführung von Batch-Skripts verhindern.

Korrigieren Sie mich bitte, wenn ich es falsch verstanden habe.

spring.batch.initializer.enabled=false 
+0

Ich möchte beide sop. Obwohl ich die Stapelinitialisierung stoppen kann, kann ich die Datenbankinitialisierung nicht stoppen. Ich möchte, dass die Datenbank nur aufgerufen wird, wenn sie tatsächlich benötigt wird, und nicht während des Ladens einer anfänglichen statischen Indexseite. – Sam

0

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.

+0

Ich benutze Spring Boot Controller und Aufruf eines generalisierten Batch-Jobs, der unabhängig von POJO sein kann. Ich war fast da, aber noch nicht. Probleme mit der Initialisierung der Datenbank haben begonnen. Ich habe versucht, das aufzuhalten und wirklich versaut. Meine App lud jede Datei ohne POJo ein, las den 'itemreader' und übergab ihn an den Writer, um in db zu schreiben. Aber da ist alles durcheinander gekommen. Jetzt kann meine Anwendung die Anwendung nicht lesen. Eigenschaftendatei, obwohl sie sich im Klassenpfad befindet. Während bei gleichen Arbeitsbereichen und Konfigurationen andere Apps Requisiten verwenden, ist das, was mit Batch gestartet wurde, nicht möglich. – Sam

+0

Ich werde meinen Code in ein paar Stunden teilen. Es arbeitet jetzt an einer separaten Maschine, aber vielleicht könntest du mir einen besseren Ansatz vorschlagen. Vielen Dank. – Sam