@@ -657,6 +657,7 @@ public EnvDep(final Predicate<String> predicate, final Consumer<Config> callback
657657
658658 /** startup callback . */
659659 private transient List <CheckedConsumer <Registry >> onStart = new ArrayList <>();
660+ private transient List <CheckedConsumer <Registry >> onStarted = new ArrayList <>();
660661
661662 /** stop callback . */
662663 private transient List <CheckedConsumer <Registry >> onStop = new ArrayList <>();
@@ -771,6 +772,7 @@ private Jooby use(final Optional<String> path, final Jooby app) {
771772 });
772773 // start/stop callback
773774 app .onStart .forEach (this .onStart ::add );
775+ app .onStarted .forEach (this .onStarted ::add );
774776 app .onStop .forEach (this .onStop ::add );
775777 // mapper
776778 if (app .mapper != null ) {
@@ -799,8 +801,8 @@ public Jooby env(final Env.Builder env) {
799801
800802 @ Override
801803 public Jooby onStart (final CheckedRunnable callback ) {
802- requireNonNull (callback , "Callback is required." );
803- return onStart ( a -> callback . run ()) ;
804+ LifeCycle . super . onStart (callback );
805+ return this ;
804806 }
805807
806808 @ Override
@@ -811,9 +813,22 @@ public Jooby onStart(final CheckedConsumer<Registry> callback) {
811813 }
812814
813815 @ Override
814- public Jooby onStop (final CheckedRunnable callback ) {
816+ public Jooby onStarted (final CheckedRunnable callback ) {
817+ LifeCycle .super .onStarted (callback );
818+ return this ;
819+ }
820+
821+ @ Override
822+ public Jooby onStarted (final CheckedConsumer <Registry > callback ) {
815823 requireNonNull (callback , "Callback is required." );
816- return onStop (e -> callback .run ());
824+ onStarted .add (callback );
825+ return this ;
826+ }
827+
828+ @ Override
829+ public Jooby onStop (final CheckedRunnable callback ) {
830+ LifeCycle .super .onStop (callback );
831+ return this ;
817832 }
818833
819834 @ Override
@@ -1978,6 +1993,11 @@ private void start(final String[] args, final Consumer<List<Route.Definition>> r
19781993 end - start ,
19791994 printer );
19801995
1996+ // started services
1997+ for (CheckedConsumer <Registry > onStarted : this .onStarted ) {
1998+ onStarted .accept (this );
1999+ }
2000+
19812001 boolean join = conf .hasPath ("server.join" ) ? conf .getBoolean ("server.join" ) : true ;
19822002 if (join ) {
19832003 server .join ();
@@ -2695,6 +2715,7 @@ private Injector bootstrap(final Config args,
26952715 });
26962716
26972717 onStart .addAll (0 , finalEnv .startTasks ());
2718+ onStarted .addAll (0 , finalEnv .startedTasks ());
26982719 onStop .addAll (finalEnv .stopTasks ());
26992720
27002721 // clear bag and freeze it
0 commit comments