8.1 KiB
Spring Boot Batch Demo
Un'applicazione Spring Boot Batch che gestisce l'elaborazione dati tra due database SQL Server:
- C6StampeCentralizzate: database principale
- SEIReport: database secondario per reporting
Requisiti
- Java 21
- Maven
- SQL Server
Struttura del Progetto
src/main/java/com/armundia/bulk/
├── BatchApplication.java # Classe principale dell'applicazione
└── config/
├── CopiaTabelleJobConfig.java # Configurazione del batch job
└── DataSourceConfig.java # Configurazione dei datasource
Configurazione
Il progetto utilizza:
- Spring Boot 3.3.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
Come Eseguire
Due modalità di esecuzione disponibili:
-
Usando build.bat:
build.bat compile # Compila il progetto build.bat run # Esegue l'applicazione
-
Usando Maven direttamente:
mvn spring-boot:run -Dspring-boot.run.arguments="--spring.batch.job.names=copiaTabelleJob"
Job Disponibili
copiaTabelleJob
: Job principale che gestisce la copia di tabelle tra i due database SQL ServercopiaDaSelectJob
: Job che esegue una query SELECT e copia i risultati in una tabella di output
Dettagli Implementazione
copiaTabelleJob
- Il job (
copiaTabelleJob
) contiene un step principale:copiaTabelleStep
: copia le tabelle specificate dai parametri del job dal database sorgente a quello di destinazione
copiaDaSelectJob
- Il job (
copiaDaSelectJob
) contiene un step principale:copiaDaSelectStep
: esegue una query SELECT personalizzata e copia i risultati in una tabella di output specificata
Gestione delle Dipendenze
L'applicazione utilizza l'iniezione delle dipendenze di Spring per gestire i JdbcTemplate:
@Configuration
public class DataSourceConfig {
@Bean(name = "inputJdbcTemplate")
public JdbcTemplate inputJdbcTemplate(DataSource inputDataSource) {
return new JdbcTemplate(inputDataSource);
}
@Bean(name = "outputJdbcTemplate")
public JdbcTemplate outputJdbcTemplate(DataSource outputDataSource) {
return new JdbcTemplate(outputDataSource);
}
}
@Configuration
public class CopiaTabelleJobConfig {
public CopiaTabelleJobConfig(
@Qualifier("outputJdbcTemplate") JdbcTemplate outputJdbcTemplate,
@Qualifier("inputJdbcTemplate") JdbcTemplate inputJdbcTemplate) {
// Configurazione del job di copia tabelle
}
}
Spring risolve le dipendenze utilizzando i @Qualifier
per distinguere tra i diversi JdbcTemplate.
Flusso dell'Applicazione
- L'applicazione parte da
BatchApplication
(classe principale con@SpringBootApplication
) - Spring Boot esegue la scansione del package
com.armundia.bulk
e trova:CopiaTabelleJobConfig
(annotata con@Configuration
)- Crea automaticamente i bean definiti in
CopiaTabelleJobConfig
- Il job
copiaTabelleJob
può essere eseguito tramite parametri o interfaccia web
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 /api/batch/jobs
Restituisce la lista delle esecuzioni job con dettagli completi.
Elenco Job Disponibili
GET /api/batch/available-jobs
Restituisce la lista dei job batch disponibili per l'avvio.
Avvio Job
POST /api/batch/launch/{jobName}
Avvia un job batch specifico. Parametri automatici:
timestamp
: timestamp di avviolaunchedBy
: "monitor"tabelle
: elenco delle tabelle da copiare (opzionale, default: "C6Mart.SPB_W6CatESG,C6Mart.W6CLIESG")
Esempio di risposta:
{
"status": "success",
"message": "Job 'copiaTabelleJob' 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=/api
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
Descrizione Job Disponibili
I job batch configurati nell'applicazione:
-
copiaTabelleJob
- Job principale di copia tabelle- Parametri:
tabelle
(opzionale): elenco delle tabelle da copiare, separate da virgola (default: "C6Mart.SPB_W6CatESG,C6Mart.W6CLIESG")inputConnection
(opzionale): ID della connessione di input personalizzataoutputConnection
(opzionale): ID della connessione di output personalizzata
- Parametri:
-
copiaDaSelectJob
- Job di copia da query SELECT personalizzata- Parametri obbligatori:
selectQuery
: query SELECT da eseguire sul database di inputoutputTable
: nome della tabella di destinazione dove copiare i risultati
- Parametri opzionali:
inputConnection
: ID della connessione di input personalizzataoutputConnection
: ID della connessione di output personalizzata
- Parametri obbligatori:
Risoluzione Problemi
Job Non Partono Automaticamente
Comportamento Corretto - I job sono configurati per non partire automaticamente.
Log e Debug
I log sono configurati per fornire informazioni dettagliate:
logging.level.com.armundia.bulk=TRACE
logging.level.org.springframework.batch=INFO
Per debug avanzato, usa:
.\build.bat debug
## Tabelle copiate
C6mart.VCONTRATTI 83.252
C6mart.CONTRATTOSEI_METADATI 109.470
C6Mart.SPB_W6CatESG 45
C6mart.W6CLIESG 3