1616 * along with this program. If not, see <http://www.gnu.org/licenses>
1717 */ package org .comixedproject .batch .initiators ;
1818
19- import static org .comixedproject .batch .comicbooks .ProcessComicBooksConfiguration .*;
19+ import static org .comixedproject .batch .comicbooks .LoadComicBooksConfiguration .*;
2020
2121import lombok .extern .log4j .Log4j2 ;
22- import org .comixedproject .model .batch .ProcessComicBooksEvent ;
22+ import org .comixedproject .model .batch .LoadComicBooksEvent ;
2323import org .comixedproject .service .batch .BatchProcessesService ;
2424import org .comixedproject .service .comicbooks .ComicBookService ;
2525import org .springframework .batch .core .Job ;
3737import org .springframework .stereotype .Component ;
3838
3939/**
40- * <code>ProcessComicBooksInitiator </code> provides an initiator that periodically scans the library
40+ * <code>LoadComicBooksInitiator </code> provides an initiator that periodically scans the library
4141 * for unprocessed comic books and starts a batch job to process them.
4242 *
4343 * @author Darryl L. Pierce
4444 */
4545@ Component
4646@ Log4j2
47- public class ProcessComicBooksInitiator {
47+ public class LoadComicBooksInitiator {
48+ private static final Object MUTEX = new Object ();
49+
4850 @ Autowired private ComicBookService comicBookService ;
4951 @ Autowired private BatchProcessesService batchProcessesService ;
5052
5153 @ Autowired
52- @ Qualifier (value = PROCESS_COMIC_BOOKS_JOB )
53- private Job processComicBooksJob ;
54+ @ Qualifier (value = LOAD_COMIC_BOOKS_JOB )
55+ private Job loadComicBooksJob ;
5456
5557 @ Autowired
5658 @ Qualifier ("batchJobLauncher" )
5759 private JobLauncher jobLauncher ;
5860
5961 /** Checks for unprocessed comics not in a group and kicks off a new batch job to process them. */
60- @ Scheduled (fixedDelayString = "${comixed.batch.process -comic-books.period:60000}" )
62+ @ Scheduled (fixedDelayString = "${comixed.batch.load -comic-books.period:60000}" )
6163 public void execute () {
6264 this .doExecute ();
6365 }
@@ -69,30 +71,27 @@ public void execute() {
6971 */
7072 @ EventListener ()
7173 @ Async
72- public void execute (ProcessComicBooksEvent event ) {
74+ public void execute (LoadComicBooksEvent event ) {
7375 this .doExecute ();
7476 }
7577
7678 private void doExecute () {
77- log .debug ("Looking for unprocessed comic books" );
78- final long unprocessedComicBookCount = this .comicBookService .getUnprocessedComicBookCount ();
79- if (unprocessedComicBookCount == 0L ) {
80- log .debug ("No comic books to be processed" );
81- return ;
82- }
83- if (!this .batchProcessesService .hasActiveExecutions (PROCESS_COMIC_BOOKS_JOB )) {
84- log .info ("Starting process comics job" );
85- try {
86- this .jobLauncher .run (
87- this .processComicBooksJob ,
88- new JobParametersBuilder ()
89- .addLong (PROCESS_COMIC_BOOKS_STARTED_JOB , System .currentTimeMillis ())
90- .toJobParameters ());
91- } catch (JobExecutionAlreadyRunningException
92- | JobRestartException
93- | JobInstanceAlreadyCompleteException
94- | JobParametersInvalidException error ) {
95- log .error ("Failed to start batch job processing comics" , error );
79+ synchronized (MUTEX ) {
80+ if (!this .batchProcessesService .hasActiveExecutions (LOAD_COMIC_BOOKS_JOB )
81+ && this .comicBookService .getUnprocessedComicBookCount () > 0 ) {
82+ log .info ("Starting process comics job" );
83+ try {
84+ this .jobLauncher .run (
85+ this .loadComicBooksJob ,
86+ new JobParametersBuilder ()
87+ .addLong (LOAD_COMIC_BOOKS_JOB_STARTED , System .currentTimeMillis ())
88+ .toJobParameters ());
89+ } catch (JobExecutionAlreadyRunningException
90+ | JobRestartException
91+ | JobInstanceAlreadyCompleteException
92+ | JobParametersInvalidException error ) {
93+ log .error ("Failed to start batch job processing comics" , error );
94+ }
9695 }
9796 }
9897 }
0 commit comments