@@ -175,7 +175,20 @@ public void withQualifiedSchedulerAndPlaceholder() throws InterruptedException {
175
175
176
176
Thread .sleep (110 );
177
177
assertThat (ctx .getBean (AtomicInteger .class ).get ()).isGreaterThanOrEqualTo (10 );
178
- assertThat (ctx .getBean (QualifiedExplicitSchedulerConfigWithPlaceholder .class ).threadName ).startsWith ("explicitScheduler1" );
178
+ assertThat (ctx .getBean (QualifiedExplicitSchedulerConfigWithPlaceholder .class ).threadName )
179
+ .startsWith ("explicitScheduler1" ).isNotEqualTo ("explicitScheduler1-1" );
180
+ }
181
+
182
+ @ Test
183
+ @ EnabledForTestGroups (LONG_RUNNING )
184
+ public void withQualifiedSchedulerWithFixedDelayTask () throws InterruptedException {
185
+ ctx = new AnnotationConfigApplicationContext (QualifiedExplicitSchedulerConfigWithFixedDelayTask .class );
186
+ assertThat (ctx .getBean (ScheduledTaskHolder .class ).getScheduledTasks ()).hasSize (1 );
187
+
188
+ Thread .sleep (110 );
189
+ assertThat (ctx .getBean (AtomicInteger .class ).get ()).isBetween (4 , 5 );
190
+ assertThat (ctx .getBean (QualifiedExplicitSchedulerConfigWithFixedDelayTask .class ).threadName )
191
+ .isEqualTo ("explicitScheduler1-1" );
179
192
}
180
193
181
194
@ Test
@@ -228,7 +241,20 @@ public void withInitiallyDelayedFixedRateTask() throws InterruptedException {
228
241
229
242
// The @Scheduled method should have been called several times
230
243
// but not more times than the delay allows.
231
- assertThat (counter .get ()).isBetween (2 , 10 );
244
+ assertThat (counter .get ()).isBetween (6 , 10 );
245
+ }
246
+
247
+ @ Test
248
+ @ EnabledForTestGroups (LONG_RUNNING )
249
+ public void withInitiallyDelayedFixedDelayTask () throws InterruptedException {
250
+ ctx = new AnnotationConfigApplicationContext (FixedDelayTaskConfig_withInitialDelay .class );
251
+
252
+ Thread .sleep (1950 );
253
+ AtomicInteger counter = ctx .getBean (AtomicInteger .class );
254
+
255
+ // The @Scheduled method should have been called several times
256
+ // but not more times than the delay allows.
257
+ assertThat (counter .get ()).isBetween (1 , 5 );
232
258
}
233
259
234
260
@ Test
@@ -333,14 +359,14 @@ static class AmbiguousExplicitSchedulerConfig {
333
359
@ Bean
334
360
public TaskScheduler taskScheduler1 () {
335
361
SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler ();
336
- scheduler .setThreadNamePrefix ("explicitScheduler1" );
362
+ scheduler .setThreadNamePrefix ("explicitScheduler1- " );
337
363
return scheduler ;
338
364
}
339
365
340
366
@ Bean
341
367
public TaskScheduler taskScheduler2 () {
342
368
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler ();
343
- scheduler .setThreadNamePrefix ("explicitScheduler2" );
369
+ scheduler .setThreadNamePrefix ("explicitScheduler2- " );
344
370
return scheduler ;
345
371
}
346
372
@@ -359,14 +385,14 @@ static class ExplicitScheduledTaskRegistrarConfig implements SchedulingConfigure
359
385
@ Bean
360
386
public TaskScheduler taskScheduler1 () {
361
387
SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler ();
362
- scheduler .setThreadNamePrefix ("explicitScheduler1" );
388
+ scheduler .setThreadNamePrefix ("explicitScheduler1- " );
363
389
return scheduler ;
364
390
}
365
391
366
392
@ Bean
367
393
public TaskScheduler taskScheduler2 () {
368
394
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler ();
369
- scheduler .setThreadNamePrefix ("explicitScheduler2" );
395
+ scheduler .setThreadNamePrefix ("explicitScheduler2- " );
370
396
return scheduler ;
371
397
}
372
398
@@ -397,14 +423,14 @@ static class QualifiedExplicitSchedulerConfig {
397
423
@ Bean @ Qualifier ("myScheduler" )
398
424
public TaskScheduler taskScheduler1 () {
399
425
SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler ();
400
- scheduler .setThreadNamePrefix ("explicitScheduler1" );
426
+ scheduler .setThreadNamePrefix ("explicitScheduler1- " );
401
427
return scheduler ;
402
428
}
403
429
404
430
@ Bean
405
431
public TaskScheduler taskScheduler2 () {
406
432
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler ();
407
- scheduler .setThreadNamePrefix ("explicitScheduler2" );
433
+ scheduler .setThreadNamePrefix ("explicitScheduler2- " );
408
434
return scheduler ;
409
435
}
410
436
@@ -414,9 +440,10 @@ public AtomicInteger counter() {
414
440
}
415
441
416
442
@ Scheduled (fixedRate = 10 , scheduler = "myScheduler" )
417
- public void task () {
443
+ public void task () throws InterruptedException {
418
444
threadName = Thread .currentThread ().getName ();
419
445
counter ().incrementAndGet ();
446
+ Thread .sleep (10 );
420
447
}
421
448
}
422
449
@@ -430,14 +457,14 @@ static class QualifiedExplicitSchedulerConfigWithPlaceholder {
430
457
@ Bean @ Qualifier ("myScheduler" )
431
458
public TaskScheduler taskScheduler1 () {
432
459
SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler ();
433
- scheduler .setThreadNamePrefix ("explicitScheduler1" );
460
+ scheduler .setThreadNamePrefix ("explicitScheduler1- " );
434
461
return scheduler ;
435
462
}
436
463
437
464
@ Bean
438
465
public TaskScheduler taskScheduler2 () {
439
466
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler ();
440
- scheduler .setThreadNamePrefix ("explicitScheduler2" );
467
+ scheduler .setThreadNamePrefix ("explicitScheduler2- " );
441
468
return scheduler ;
442
469
}
443
470
@@ -447,9 +474,10 @@ public AtomicInteger counter() {
447
474
}
448
475
449
476
@ Scheduled (fixedRate = 10 , scheduler = "${scheduler}" )
450
- public void task () {
477
+ public void task () throws InterruptedException {
451
478
threadName = Thread .currentThread ().getName ();
452
479
counter ().incrementAndGet ();
480
+ Thread .sleep (10 );
453
481
}
454
482
455
483
@ Bean
@@ -463,21 +491,55 @@ public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
463
491
}
464
492
465
493
494
+ @ Configuration
495
+ @ EnableScheduling
496
+ static class QualifiedExplicitSchedulerConfigWithFixedDelayTask {
497
+
498
+ String threadName ;
499
+
500
+ @ Bean @ Qualifier ("myScheduler" )
501
+ public TaskScheduler taskScheduler1 () {
502
+ SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler ();
503
+ scheduler .setThreadNamePrefix ("explicitScheduler1-" );
504
+ return scheduler ;
505
+ }
506
+
507
+ @ Bean
508
+ public TaskScheduler taskScheduler2 () {
509
+ ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler ();
510
+ scheduler .setThreadNamePrefix ("explicitScheduler2-" );
511
+ return scheduler ;
512
+ }
513
+
514
+ @ Bean
515
+ public AtomicInteger counter () {
516
+ return new AtomicInteger ();
517
+ }
518
+
519
+ @ Scheduled (fixedDelay = 10 , scheduler = "myScheduler" )
520
+ public void task () throws InterruptedException {
521
+ threadName = Thread .currentThread ().getName ();
522
+ counter ().incrementAndGet ();
523
+ Thread .sleep (10 );
524
+ }
525
+ }
526
+
527
+
466
528
@ Configuration
467
529
@ EnableScheduling
468
530
static class SchedulingEnabled_withAmbiguousTaskSchedulers_butNoActualTasks {
469
531
470
532
@ Bean
471
533
public TaskScheduler taskScheduler1 () {
472
534
SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler ();
473
- scheduler .setThreadNamePrefix ("explicitScheduler1" );
535
+ scheduler .setThreadNamePrefix ("explicitScheduler1- " );
474
536
return scheduler ;
475
537
}
476
538
477
539
@ Bean
478
540
public TaskScheduler taskScheduler2 () {
479
541
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler ();
480
- scheduler .setThreadNamePrefix ("explicitScheduler2" );
542
+ scheduler .setThreadNamePrefix ("explicitScheduler2- " );
481
543
return scheduler ;
482
544
}
483
545
}
@@ -494,15 +556,15 @@ public void task() {
494
556
@ Bean
495
557
public TaskScheduler taskScheduler1 () {
496
558
SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler ();
497
- scheduler .setThreadNamePrefix ("explicitScheduler1" );
559
+ scheduler .setThreadNamePrefix ("explicitScheduler1- " );
498
560
scheduler .setConcurrencyLimit (1 );
499
561
return scheduler ;
500
562
}
501
563
502
564
@ Bean
503
565
public TaskScheduler taskScheduler2 () {
504
566
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler ();
505
- scheduler .setThreadNamePrefix ("explicitScheduler2" );
567
+ scheduler .setThreadNamePrefix ("explicitScheduler2- " );
506
568
return scheduler ;
507
569
}
508
570
}
@@ -620,8 +682,26 @@ public AtomicInteger counter() {
620
682
}
621
683
622
684
@ Scheduled (initialDelay = 1000 , fixedRate = 100 )
623
- public void task () {
685
+ public void task () throws InterruptedException {
686
+ counter ().incrementAndGet ();
687
+ Thread .sleep (100 );
688
+ }
689
+ }
690
+
691
+
692
+ @ Configuration
693
+ @ EnableScheduling
694
+ static class FixedDelayTaskConfig_withInitialDelay {
695
+
696
+ @ Bean
697
+ public AtomicInteger counter () {
698
+ return new AtomicInteger ();
699
+ }
700
+
701
+ @ Scheduled (initialDelay = 1000 , fixedDelay = 100 )
702
+ public void task () throws InterruptedException {
624
703
counter ().incrementAndGet ();
704
+ Thread .sleep (100 );
625
705
}
626
706
}
627
707
0 commit comments