268 lines
12 KiB
Batchfile
268 lines
12 KiB
Batchfile
@echo off
|
|
setlocal
|
|
|
|
rem Imposta JAVA_HOME
|
|
set JAVA_HOME=C:\Dev2012\BUILDERS\java\jdk-21.0.6
|
|
|
|
rem Aggiungi java al PATH
|
|
set PATH=%JAVA_HOME%\bin;%PATH%
|
|
|
|
if "%1"=="compile" (
|
|
echo Compilazione del progetto...
|
|
call mvn clean package
|
|
goto :eof
|
|
)
|
|
|
|
if "%1"=="run" (
|
|
if not exist target\pdcreport-bulk-0.0.1-SNAPSHOT.jar (
|
|
call mvn clean package
|
|
)
|
|
java -jar target\pdcreport-bulk-0.0.1-SNAPSHOT.jar
|
|
goto :eof
|
|
)
|
|
|
|
if "%1"=="runjob" (
|
|
if "%2"=="" (
|
|
echo Errore: Specificare il nome del job da eseguire
|
|
echo Uso: build.bat runjob [nome_job]
|
|
echo Esempi:
|
|
echo build.bat runjob preTrimestraleJob
|
|
echo build.bat runjob dispachJob
|
|
goto :eof
|
|
)
|
|
if not exist target\pdcreport-bulk-0.0.1-SNAPSHOT.jar (
|
|
call mvn clean package
|
|
)
|
|
echo ========================================
|
|
echo AVVIO JOB BATCH CON SHUTDOWN AUTOMATICO
|
|
echo ========================================
|
|
echo.
|
|
java -jar target\pdcreport-bulk-0.0.1-SNAPSHOT.jar --job.name=%2
|
|
echo.
|
|
echo ========================================
|
|
echo ESECUZIONE COMPLETATA
|
|
echo ========================================
|
|
goto :eof
|
|
)
|
|
|
|
if "%1"=="debug" (
|
|
echo Avvio dell'applicazione in modalita debug...
|
|
if not exist target\pdcreport-bulk-0.0.1-SNAPSHOT.jar (
|
|
call mvn clean package
|
|
)
|
|
java -jar target\pdcreport-bulk-0.0.1-SNAPSHOT.jar --spring.batch.job.name=dispachJob --debug >run.log 2>&1
|
|
goto :eof
|
|
)
|
|
|
|
if "%1"=="debug-remote" (
|
|
echo Avvio dell'applicazione con debug remoto Java...
|
|
echo IMPORTANTE: Connetti il debugger IDE alla porta 5005
|
|
echo Premi CTRL+C per terminare quando hai finito il debug
|
|
if not exist target\pdcreport-bulk-0.0.1-SNAPSHOT.jar (
|
|
call mvn clean package
|
|
)
|
|
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005 -jar target\pdcreport-bulk-0.0.1-SNAPSHOT.jar
|
|
goto :eof
|
|
)
|
|
|
|
@REM if "%1"=="status" (
|
|
@REM echo ===========================================
|
|
@REM echo STATUS JOB SPRING BATCH
|
|
@REM echo ===========================================
|
|
@REM echo.
|
|
@REM echo Interrogazione database per job attivi...
|
|
@REM echo.
|
|
|
|
@REM rem Query SQL per ottenere i job in esecuzione
|
|
@REM sqlcmd -S localhost -d C6StampeCentralizzate -U F701264 -P contrsei -Q "SELECT je.JOB_EXECUTION_ID, ji.JOB_NAME, je.STATUS, je.START_TIME, je.END_TIME FROM BATCH_JOB_EXECUTION je INNER JOIN BATCH_JOB_INSTANCE ji ON je.JOB_INSTANCE_ID = ji.JOB_INSTANCE_ID WHERE je.STATUS IN ('STARTED', 'STARTING', 'STOPPING') OR (je.STATUS = 'COMPLETED' AND je.END_TIME > DATEADD(hour, -1, GETDATE())) ORDER BY je.START_TIME DESC" -h -1 -s "," -W
|
|
|
|
@REM if errorlevel 1 (
|
|
@REM echo Errore nella connessione al database o nessun job trovato.
|
|
@REM echo.
|
|
@REM echo Verifica processi bulk attivi:
|
|
@REM tasklist /FI "IMAGENAME eq java.exe" 2>nul | find "java.exe" >nul
|
|
@REM if errorlevel 1 (
|
|
@REM echo - Nessun processo Java trovato
|
|
@REM ) else (
|
|
@REM powershell -Command "Get-WmiObject Win32_Process | Where-Object {$_.Name -eq 'java.exe' -and $_.CommandLine -like '*pdcreport-bulk*'} | Select-Object ProcessId, @{Name='Job';Expression={if($_.CommandLine -match '--spring.batch.job.names=([^ ]+)'){$matches[1]}else{'N/A'}}} | Format-Table -AutoSize"
|
|
@REM )
|
|
@REM )
|
|
|
|
@REM echo.
|
|
@REM echo ===========================================
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
@REM if "%1"=="kill" (
|
|
@REM if "%2"=="" (
|
|
@REM echo ===========================================
|
|
@REM echo TERMINA JOB SPECIFICO
|
|
@REM echo ===========================================
|
|
@REM echo.
|
|
@REM echo Uso: build.bat kill [job_execution_id]
|
|
@REM echo.
|
|
@REM echo Job attivi disponibili per terminazione:
|
|
@REM sqlcmd -S localhost -d C6StampeCentralizzate -U F701264 -P contrsei -Q "SELECT je.JOB_EXECUTION_ID, ji.JOB_NAME, je.STATUS, je.START_TIME FROM BATCH_JOB_EXECUTION je INNER JOIN BATCH_JOB_INSTANCE ji ON je.JOB_INSTANCE_ID = ji.JOB_INSTANCE_ID WHERE je.STATUS IN ('STARTED', 'STARTING', 'STOPPING') ORDER BY je.START_TIME DESC" -h -1 -s "," -W
|
|
@REM echo.
|
|
@REM echo ===========================================
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
@REM echo ===========================================
|
|
@REM echo TERMINA JOB ID: %2
|
|
@REM echo ===========================================
|
|
@REM echo.
|
|
@REM echo Verifica esistenza job...
|
|
|
|
@REM rem Verifica che il job esista e sia attivo
|
|
@REM sqlcmd -S localhost -d C6StampeCentralizzate -U F701264 -P contrsei -Q "SELECT COUNT(*) FROM BATCH_JOB_EXECUTION WHERE JOB_EXECUTION_ID=%2 AND STATUS IN ('STARTED', 'STARTING', 'STOPPING')" -h -1 -W >temp_job_exists.txt 2>nul
|
|
|
|
@REM if errorlevel 1 (
|
|
@REM echo ERRORE: Impossibile verificare il job nel database.
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
@REM set /p JOB_EXISTS=<temp_job_exists.txt
|
|
@REM del temp_job_exists.txt >nul 2>&1
|
|
|
|
@REM if "%JOB_EXISTS%"=="1" (
|
|
@REM echo Job %2 trovato e attivo. Procedura di terminazione...
|
|
@REM echo.
|
|
@REM echo ATTENZIONE: Terminazione forzata del processo contenente il job.
|
|
@REM echo Questo potrebbe causare perdita di dati!
|
|
@REM echo.
|
|
|
|
@REM rem Termina il processo Java che contiene il job
|
|
@REM powershell -Command "Get-WmiObject Win32_Process | Where-Object {$_.Name -eq 'java.exe' -and $_.CommandLine -like '*pdcreport-bulk*'} | ForEach-Object {Write-Host 'Terminazione processo PID:' $_.ProcessId; Stop-Process -Id $_.ProcessId -Force}"
|
|
|
|
@REM echo.
|
|
@REM echo Aggiornamento status job nel database...
|
|
@REM sqlcmd -S localhost -d C6StampeCentralizzate -U F701264 -P contrsei -Q "UPDATE BATCH_JOB_EXECUTION SET STATUS='FAILED', END_TIME=GETDATE(), EXIT_CODE='KILLED', EXIT_MESSAGE='Job terminato manualmente' WHERE JOB_EXECUTION_ID=%2"
|
|
|
|
@REM echo Job %2 terminato e marcato come FAILED nel database.
|
|
@REM ) else (
|
|
@REM echo ERRORE: Job %2 non trovato o non attivo.
|
|
@REM echo.
|
|
@REM echo Job attivi disponibili:
|
|
@REM sqlcmd -S localhost -d C6StampeCentralizzate -U F701264 -P contrsei -Q "SELECT je.JOB_EXECUTION_ID, ji.JOB_NAME, je.STATUS FROM BATCH_JOB_EXECUTION je INNER JOIN BATCH_JOB_INSTANCE ji ON je.JOB_INSTANCE_ID = ji.JOB_INSTANCE_ID WHERE je.STATUS IN ('STARTED', 'STARTING', 'STOPPING')" -h -1 -s "," -W
|
|
@REM )
|
|
|
|
@REM echo.
|
|
@REM echo ===========================================
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
@REM if "%1"=="stop" (
|
|
@REM echo ===========================================
|
|
@REM echo SHUTDOWN SICURO SERVER
|
|
@REM echo ===========================================
|
|
@REM echo.
|
|
@REM echo Verifica job attivi prima dello shutdown...
|
|
@REM echo.
|
|
|
|
@REM rem Verifica job attivi nel database usando approccio diretto
|
|
@REM for /f "tokens=1" %%a in ('sqlcmd -S localhost -d C6StampeCentralizzate -U F701264 -P contrsei -Q "SELECT COUNT(*) FROM BATCH_JOB_EXECUTION WHERE STATUS IN ('STARTED', 'STARTING', 'STOPPING')" -h -1 -W -m 1 2^>nul') do (
|
|
@REM set JOB_COUNT=%%a
|
|
@REM goto :job_count_found
|
|
@REM )
|
|
|
|
@REM rem Se arriviamo qui, il comando SQL è fallito
|
|
@REM echo ERRORE: Impossibile verificare lo stato dei job nel database.
|
|
@REM echo Shutdown annullato per sicurezza.
|
|
@REM goto :eof
|
|
|
|
@REM :job_count_found
|
|
@REM rem Rimuovi spazi dalla variabile JOB_COUNT
|
|
@REM set JOB_COUNT=%JOB_COUNT: =%
|
|
|
|
@REM echo Debug: JOB_COUNT=[%JOB_COUNT%]
|
|
|
|
@REM rem Se JOB_COUNT è vuoto o non numerico, assumiamo 0 job attivi
|
|
@REM if "%JOB_COUNT%"=="" set JOB_COUNT=0
|
|
@REM if not defined JOB_COUNT set JOB_COUNT=0
|
|
|
|
@REM if "%JOB_COUNT%"=="0" (
|
|
@REM echo Nessun job attivo trovato. Procedura di shutdown sicura...
|
|
@REM echo.
|
|
@REM echo Ricerca processi TWS da terminare...
|
|
|
|
@REM rem Trova il PID del processo TWS
|
|
@REM for /f "tokens=2" %%i in ('tasklist /FI "WINDOWTITLE eq TWS-BatchProcess" /NH 2^>nul') do (
|
|
@REM echo Terminazione processo TWS con PID: %%i
|
|
@REM taskkill /PID %%i /F >nul 2>&1
|
|
@REM if not errorlevel 1 (
|
|
@REM echo Processo TWS terminato con successo.
|
|
@REM ) else (
|
|
@REM echo Avviso: Impossibile terminare il processo %%i
|
|
@REM )
|
|
@REM )
|
|
|
|
@REM rem Verifica anche processi bulk generici
|
|
@REM powershell -Command "Get-WmiObject Win32_Process | Where-Object {$_.Name -eq 'java.exe' -and $_.CommandLine -like '*pdcreport-bulk*'} | ForEach-Object {Write-Host 'Terminazione processo bulk PID:' $_.ProcessId; Stop-Process -Id $_.ProcessId -Force}"
|
|
|
|
@REM echo.
|
|
@REM echo Shutdown completato con successo!
|
|
@REM ) else (
|
|
@REM echo ATTENZIONE: Trovati %JOB_COUNT% job attivi!
|
|
@REM echo.
|
|
@REM echo Job attivi rilevati:
|
|
@REM sqlcmd -S localhost -d C6StampeCentralizzate -U F701264 -P contrsei -Q "SELECT je.JOB_EXECUTION_ID, ji.JOB_NAME, je.STATUS, je.START_TIME FROM BATCH_JOB_EXECUTION je INNER JOIN BATCH_JOB_INSTANCE ji ON je.JOB_INSTANCE_ID = ji.JOB_INSTANCE_ID WHERE je.STATUS IN ('STARTED', 'STARTING', 'STOPPING') ORDER BY je.START_TIME DESC" -h -1 -s "," -W
|
|
@REM echo.
|
|
@REM echo SHUTDOWN ANNULLATO per sicurezza!
|
|
@REM echo Attendere il completamento dei job o terminarli manualmente.
|
|
@REM )
|
|
|
|
@REM echo.
|
|
@REM echo ===========================================
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
@REM if "%1"=="tws" (
|
|
@REM echo Verifica se il processo TWS è già attivo...
|
|
@REM tasklist /FI "IMAGENAME eq java.exe" /FI "WINDOWTITLE eq pdcreport-bulk*" 2>nul | find /I "java.exe" >nul
|
|
@REM if not errorlevel 1 (
|
|
@REM echo ERRORE: Il processo TWS è già attivo!
|
|
@REM echo Terminare il processo esistente prima di avviarne uno nuovo.
|
|
@REM goto :eof
|
|
@REM )
|
|
@REM echo Processo TWS non attivo, avvio in corso...
|
|
@REM if not exist target\pdcreport-bulk-0.0.1-SNAPSHOT.jar (
|
|
@REM echo Compilazione necessaria...
|
|
@REM call mvn clean package
|
|
@REM )
|
|
@REM echo Avvio del processo TWS in background...
|
|
@REM start "TWS-BatchProcess" java -jar target\pdcreport-bulk-0.0.1-SNAPSHOT.jar
|
|
@REM echo Processo TWS avviato con successo!
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
@REM if "%1"=="monitor-gui" (
|
|
@REM echo Avvio monitor grafico...
|
|
@REM echo Utilizzo Maven per avviare il monitor con tutte le dipendenze...
|
|
@REM start "Spring Batch Monitor" mvn exec:java -Dexec.mainClass="com.fideuram.bulk.monitor.ui.JobMonitorFrame" -Dexec.cleanupDaemonThreads=false
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
@REM if "%1"=="lista-job" (
|
|
@REM echo Elenco job previsti...
|
|
@REM echo ricodificaMassivaJob
|
|
@REM echo w6catrJob
|
|
@REM echo preTrimestraleJob
|
|
@REM echo appoContrattiJob
|
|
@REM echo aspettaJob
|
|
@REM goto :eof
|
|
@REM )
|
|
|
|
echo Utilizzo:
|
|
echo build.bat compile - Compila il progetto
|
|
echo build.bat run - Attiva l'applicazione come servizio
|
|
echo build.bat runjob [job] - Esegue il job specifico e chiude
|
|
@REM echo build.bat tws - Avvia il processo TWS (verifica se non è già attivo)
|
|
@REM echo build.bat status - Mostra lo status dei job Spring Batch in corso
|
|
@REM echo build.bat kill [id] - Termina forzatamente un job specifico
|
|
@REM echo build.bat stop - Shutdown sicuro del server (solo se nessun job attivo)
|
|
echo build.bat debug - Esegue l'applicazione in modalita debug
|
|
echo build.bat debug-remote - Esegue l'applicazione in modalita debug remota
|
|
@REM echo build.bat monitor-gui - Avvia il monitor grafico
|
|
@REM echo build.bat lista-job - Elenco job previsti
|