9.4 KiB
Spring Batch Job Management System
Sistema completo di gestione e monitoraggio job Spring Batch con interfacce web e desktop, controllo del ciclo di vita dei job e gestione sicura dei processi.
🚀 Funzionalità Principali
- Esecuzione Job Controllata: Avvio job specifici con parametri personalizzati
- Monitoraggio Real-time: Interfacce web e desktop per il monitoraggio dei job
- Gestione Processi: Avvio, stop e kill sicuri dei processi batch
- Status Tracking: Monitoraggio completo dello stato dei job attivi
- Shutdown Sicuro: Terminazione controllata solo quando non ci sono job attivi
📊 Database
- C6StampeCentralizzate: Database principale con metadata Spring Batch
- SEIReport: Database secondario per reporting
- ConsulenzaUnica: Database per elaborazioni consulenza
Requisiti
- Java 21
- Maven
- SQL Server
Struttura del Progetto
src/main/java/com/fideuram/bulk/
├── BatchApplication.java # Classe principale dell'applicazione
└── config/
├── BatchDispachConfig.java # Configurazione del batch job
└── DatabaseConfig.java # Configurazione dei datasource
Configurazione
Il progetto utilizza:
- Spring Boot 3.1.13
- Spring Batch 5.1.3
- SQL Server per il job repository
Branch
master
: versione stabile per Java 8jdk11
: versione migrata a Java 11 con Spring Boot 2.7.x
Database
La configurazione del database utilizza Hikari connection pool e richiede:
-
Database principale (C6StampeCentralizzate):
jdbc:sqlserver://localhost;databaseName=C6StampeCentralizzate User: F701264 Password: centrsei
-
Database reporting (SEIReport):
jdbc:sqlserver://localhost;databaseName=SEIReport User: F701264 Password: centrsei
Spring Batch Schema
Il progetto include uno schema SQL Server personalizzato (schema-sqlserver.sql
) che crea:
- Tabelle: BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_JOB_EXECUTION_PARAMS, etc.
- Sequenze necessarie per il job repository
🛠️ Comandi Build.bat
Il sistema include uno script build.bat
completo per la gestione del ciclo di vita dei job:
Compilazione e Gestione Processi
build.bat compile # Compila il progetto
build.bat tws # Avvia il processo TWS (se non già attivo)
build.bat stop # Shutdown sicuro (solo se nessun job attivo)
Esecuzione Job
build.bat run [jobName] # Esegue job specifico (es: preTrimestraleJob)
build.bat debug # Esecuzione in modalità debug
Monitoraggio
build.bat status # Mostra status job Spring Batch attivi
build.bat monitor-gui # Avvia monitor grafico Swing
Gestione Job Avanzata
build.bat kill [jobId] # Termina forzatamente un job specifico
Esempi di Utilizzo
# Workflow tipico
build.bat compile
build.bat tws
build.bat run aspettaJob
build.bat status
build.bat monitor-gui
build.bat stop
📋 Job Disponibili
Job di Produzione
-
preTrimestraleJob
: Elaborazione dati trimestrali con steps:notifyStartStep
: Notifica inizio elaborazionetruncateStep
: Pulizia tabelle temporaneeavvioTrimestraleStep
: Avvio elaborazione principalecongelamentoContrattiStep
: Congelamento contrattinotifyEndStep
: Notifica fine elaborazione
-
appoContrattiJob
: Gestione appuntamenti contratti- Include
ricodificaMassivaJob
per ricodifica massiva
- Include
-
dispachJob
: Job principale di dispatchingciaoStep
: Inserimento log nel database C6StampeCentralizzateseiReportStep
: Interazione con database SEIReport
Job di Test
aspettaJob
: Job di test che attende 1 minuto con logging periodicohelloWorldJob
: Job di esempio per test di base
Dettagli Implementazione
- Il job (
dispachJob
) contiene due step in sequenza:ciaoStep
: inserisce una riga su LogN nel database C6StampeCentralizzateseiReportStep
: interagisce con il database SEIReport
Gestione delle Dipendenze
L'applicazione utilizza l'iniezione delle dipendenze di Spring per gestire i JdbcTemplate:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "trimestraleJdbcTemplate")
public JdbcTemplate trimestraleJdbcTemplate(DataSource trimestraleDataSource) {
return new JdbcTemplate(trimestraleDataSource);
}
}
@Configuration
public class BatchDispachConfig {
public BatchDispachConfig(JdbcTemplate trimestraleJdbcTemplate) {
this.trimestraleJdbcTemplate = trimestraleJdbcTemplate;
}
}
Spring risolve le dipendenze in questo modo:
- Cerca un bean di tipo
JdbcTemplate
- Se trova più bean dello stesso tipo:
- Controlla se uno è marcato come
@Primary
- Controlla se il nome del bean corrisponde al nome del parametro
- Usa
@Qualifier
se specificato
- Controlla se uno è marcato come
Flusso dell'Applicazione
-
L'applicazione parte da
BatchApplication
(classe principale con@SpringBootApplication
) -
Spring Boot esegue la scansione del package
com.fideuram.bulk
e trova:BatchDispachConfig
(annotata con@Configuration
)- Crea automaticamente i bean definiti in
BatchDispachConfig
-
BatchApplication
utilizza il job attraverso:@Autowired private Job dispachJob;
Comandi di Esecuzione
Il progetto include uno script build.bat
che semplifica la compilazione e l'esecuzione:
Compilazione
.\build.bat compile
Esecuzione Job Batch
# Esecuzione senza job automatici (configurazione predefinita)
.\build.bat run
# Esecuzione con job specifico in modalità debug
.\build.bat debug
Monitor Grafici
# Monitor GUI (Swing Desktop)
.\build.bat monitor-gui
# Monitor Web: avvia l'app e vai su http://localhost:8080
.\build.bat run
Sistema di Monitoraggio
Monitor Web (HTML) - RACCOMANDATO
Avvio:
- Esegui
.\.build.bat run
- Apri il browser su
http://localhost:8080
Funzionalità:
- Interfaccia web moderna con design responsive
- Tabella dinamica con dettagli completi dei job batch
- Auto-refresh ON/OFF configurabile
- Aggiornamento manuale con pulsante dedicato
- Avvio job batch direttamente dall'interfaccia
- Gestione errori con messaggi informativi
- Formattazione automatica di date e stati
- Colori per gli stati (verde=completato, rosso=fallito, blu=in esecuzione)
Sezione Avvio Job:
- Pulsanti dinamici per tutti i job disponibili
- Conferma prima dell'avvio
- Feedback in tempo reale
- Aggiornamento automatico dopo l'avvio
Monitor GUI (Swing Desktop)
Avvio:
.\build.bat monitor-gui
Funzionalità:
- Interfaccia desktop Java Swing
- Auto-refresh ON/OFF toggle
- Aggiornamento manuale
- Tabella con dettagli job
API Endpoints
L'applicazione espone i seguenti endpoint REST:
Monitoraggio Job
GET /actuator/batch/jobs
Restituisce la lista delle esecuzioni job con dettagli completi.
Elenco Job Disponibili
GET /actuator/batch/available-jobs
Restituisce la lista dei job batch disponibili per l'avvio.
Avvio Job
POST /actuator/batch/launch/{jobName}
Avvia un job batch specifico. Parametri automatici:
timestamp
: timestamp di avviolaunchedBy
: "monitor"
Esempio di risposta:
{
"status": "success",
"message": "Job 'dispachJob' avviato con successo",
"executionId": 123,
"jobStatus": "STARTING"
}
Configurazione Avanzata
Disabilitazione Auto-Start Job
Per impostazione predefinita, i job non si avviano automaticamente:
# In application.properties
spring.batch.job.enabled=false
Configurazione Actuator
Gli endpoint di monitoraggio sono abilitati tramite:
# Endpoint Actuator per il monitoraggio
management.endpoints.web.exposure.include=health,info,batch
management.endpoint.batch.enabled=true
management.endpoints.web.base-path=/actuator
Database Job Repository
L'applicazione utilizza SQL Server per il job repository con tabelle personalizzate:
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema-sqlserver.sql
spring.batch.jdbc.initialize-schema=never
Job Disponibili
I job batch configurati nell'applicazione:
dispachJob
- Job principale di dispatchingpreTrimestraleJob
- Job per elaborazioni trimestralihelloWorldJob
- Job di esempio per test
Risoluzione Problemi
Job Non Partono Automaticamente
Comportamento Corretto - I job sono configurati per non partire automaticamente.
Monitor GUI Non Si Apre
- Verifica che l'applicazione Spring Boot sia in esecuzione (
.\.build.bat run
) - Controlla che la porta 8080 non sia occupata
- Usa il monitor web come alternativa
Errori di Connessione Database
- Verifica le credenziali in
application.properties
- Controlla che SQL Server sia accessibile
- Verifica che le tabelle Spring Batch siano create
Job Già in Esecuzione
Se ricevi l'errore "Job già in esecuzione":
- Attendi il completamento del job corrente
- Controlla lo stato nella tabella del monitor
- Verifica i log per eventuali job bloccati
Log e Debug
I log sono configurati per fornire informazioni dettagliate:
logging.level.com.fideuram.bulk=TRACE
logging.level.org.springframework.batch=INFO
Per debug avanzato, usa:
.\build.bat debug