2424import java .io .IOException ;
2525import java .util .Properties ;
2626
27+ import org .quartz .JobDetail ;
2728import org .quartz .Trigger ;
2829import org .slf4j .Logger ;
2930import org .slf4j .LoggerFactory ;
3031import org .springframework .beans .factory .annotation .Autowired ;
32+ import org .springframework .beans .factory .annotation .Value ;
3133import org .springframework .beans .factory .config .PropertiesFactoryBean ;
3234import org .springframework .context .ApplicationContext ;
3335import org .springframework .context .annotation .Bean ;
3840import org .springframework .scheduling .quartz .SchedulerFactoryBean ;
3941import org .springframework .transaction .PlatformTransactionManager ;
4042
41- import com .iemr .common .utils .config .ConfigProperties ;
42-
4343import jakarta .annotation .PostConstruct ;
4444
4545@ Configuration
@@ -55,11 +55,80 @@ public class QuartzConfig {
5555 @ Autowired
5656 private ApplicationContext applicationContext ;
5757
58+ /*
59+ * These are read through @Value and not through ConfigProperties on purpose.
60+ * ConfigProperties keeps the Environment in a static field that is populated by
61+ * an @Autowired setter on its own bean, so it can still be null while the @Bean
62+ * methods below run - in that case it falls back to reading application.properties
63+ * straight off the classpath, and any ${ENV_VAR} placeholder in there comes back
64+ * as the literal text. getBoolean() then quietly turns that into false and the job
65+ * is scheduled with quartzJobDefaultSchedule instead, with nothing in the log.
66+ * Injected fields are set before any @Bean method is called and go through the
67+ * normal placeholder resolution, so environment overrides are honoured.
68+ */
69+ @ Value ("${start-unblock-scheduler:false}" )
70+ private boolean startUnblockJob ;
71+ @ Value ("${cron-scheduler-unblock:" + quartzJobDefaultSchedule + "}" )
72+ private String unblockSchedule ;
73+
74+ @ Value ("${start-sms-scheduler:false}" )
75+ private boolean startSmsJob ;
76+ @ Value ("${cron-scheduler-sms:" + quartzJobDefaultSchedule + "}" )
77+ private String smsSchedule ;
78+
79+ @ Value ("${start-email-scheduler:false}" )
80+ private boolean startEmailJob ;
81+ @ Value ("${cron-scheduler-email:" + quartzJobDefaultSchedule + "}" )
82+ private String emailSchedule ;
83+
84+ @ Value ("${start-registration-scheduler:false}" )
85+ private boolean startRegistrationJob ;
86+ @ Value ("${cron-scheduler-registration:" + quartzJobDefaultSchedule + "}" )
87+ private String registrationSchedule ;
88+
89+ @ Value ("${start-everwelldatasync-scheduler:false}" )
90+ private boolean startEverwellDataSyncJob ;
91+ @ Value ("${cron-scheduler-everwelldatasync:" + quartzJobDefaultSchedule + "}" )
92+ private String everwellDataSyncSchedule ;
93+
94+ @ Value ("${start-ctidatasync-scheduler:false}" )
95+ private boolean startCtiDataSyncJob ;
96+ @ Value ("${cron-scheduler-ctidatasync:" + quartzJobDefaultSchedule + "}" )
97+ private String ctiDataSyncSchedule ;
98+
99+ @ Value ("${start-avni-scheduler:false}" )
100+ private boolean startAvniRegistrationJob ;
101+ @ Value ("${cron-avni-registration:" + quartzJobDefaultSchedule + "}" )
102+ private String avniRegistrationSchedule ;
103+
104+ @ Value ("${start-nhmdashboard-scheduler:false}" )
105+ private boolean startNhmDashboardJob ;
106+ @ Value ("${cron-scheduler-nhmdashboard:" + quartzJobDefaultSchedule + "}" )
107+ private String nhmDashboardSchedule ;
108+
58109 @ PostConstruct
59110 public void init () {
60111 log .debug ("QuartzConfig initialized." );
61112 }
62113
114+ /**
115+ * Builds the trigger for a job, logging what it resolved to. A job that is
116+ * switched off gets quartzJobDefaultSchedule, which only comes round on the 31st
117+ * of December - so the log line is the only way to tell "off" apart from
118+ * "misconfigured" without waiting until the end of the year.
119+ */
120+ private CronTriggerFactoryBean cronTrigger (String jobName , boolean startJob , String schedule ,
121+ JobDetail jobDetail ) {
122+ String scheduleConfig = startJob ? schedule : quartzJobDefaultSchedule ;
123+ log .info ("Quartz job {} - enabled: {}, cron: {}" , jobName , startJob , scheduleConfig );
124+
125+ CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
126+ cronTriggerFactoryBean .setJobDetail (jobDetail );
127+ cronTriggerFactoryBean .setCronExpression (scheduleConfig );
128+ cronTriggerFactoryBean .setGroup (quartzJobGroup );
129+ return cronTriggerFactoryBean ;
130+ }
131+
63132 @ Bean
64133 public Properties quartzProperties () {
65134 PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean ();
@@ -114,17 +183,7 @@ public JobDetailFactoryBean processMQJobForUnblock() {
114183
115184 @ Bean
116185 public CronTriggerFactoryBean processMQTriggerForUnblock () {
117- Boolean startJob = ConfigProperties .getBoolean ("start-unblock-scheduler" );
118- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
119- ;
120- String scheduleConfig = quartzJobDefaultSchedule ;
121- if (startJob ) {
122- scheduleConfig = ConfigProperties .getPropertyByName ("cron-scheduler-unblock" );
123- }
124- cronTriggerFactoryBean .setJobDetail (processMQJobForUnblock ().getObject ());
125- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
126- cronTriggerFactoryBean .setGroup (quartzJobGroup );
127- return cronTriggerFactoryBean ;
186+ return cronTrigger ("unblock" , startUnblockJob , unblockSchedule , processMQJobForUnblock ().getObject ());
128187 }
129188
130189 // --------------------------------------------------------------------------------------------------------------
@@ -139,17 +198,7 @@ public JobDetailFactoryBean processMQJobForSMS() {
139198
140199 @ Bean
141200 public CronTriggerFactoryBean processMQTriggerForSMS () {
142- Boolean startJob = ConfigProperties .getBoolean ("start-sms-scheduler" );
143- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
144- ;
145- String scheduleConfig = quartzJobDefaultSchedule ;
146- if (startJob ) {
147- scheduleConfig = ConfigProperties .getPropertyByName ("cron-scheduler-sms" );
148- }
149- cronTriggerFactoryBean .setJobDetail (processMQJobForSMS ().getObject ());
150- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
151- cronTriggerFactoryBean .setGroup (quartzJobGroup );
152- return cronTriggerFactoryBean ;
201+ return cronTrigger ("sms" , startSmsJob , smsSchedule , processMQJobForSMS ().getObject ());
153202 }
154203
155204 // --------------------------------------------------------------------------------------------------------------
@@ -164,16 +213,7 @@ public JobDetailFactoryBean processMQJobForEmail() {
164213
165214 @ Bean
166215 public CronTriggerFactoryBean processMQTriggerForEmail () {
167- Boolean startJob = ConfigProperties .getBoolean ("start-email-scheduler" );
168- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
169- String scheduleConfig = quartzJobDefaultSchedule ;
170- if (Boolean .TRUE .equals (startJob )) {
171- scheduleConfig = ConfigProperties .getPropertyByName ("cron-scheduler-email" );
172- }
173- cronTriggerFactoryBean .setJobDetail (processMQJobForEmail ().getObject ());
174- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
175- cronTriggerFactoryBean .setGroup (quartzJobGroup );
176- return cronTriggerFactoryBean ;
216+ return cronTrigger ("email" , startEmailJob , emailSchedule , processMQJobForEmail ().getObject ());
177217 }
178218
179219 // --------------------------------------------------------------------------------------------------------------
@@ -188,16 +228,8 @@ public JobDetailFactoryBean processMQJobForRegistration() {
188228
189229 @ Bean
190230 public CronTriggerFactoryBean processMQTriggerForRegistration () {
191- Boolean startJob = ConfigProperties .getBoolean ("start-registration-scheduler" );
192- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
193- String scheduleConfig = quartzJobDefaultSchedule ;
194- if (startJob ) {
195- scheduleConfig = ConfigProperties .getPropertyByName ("cron-scheduler-registration" );
196- }
197- cronTriggerFactoryBean .setJobDetail (processMQJobForRegistration ().getObject ());
198- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
199- cronTriggerFactoryBean .setGroup (quartzJobGroup );
200- return cronTriggerFactoryBean ;
231+ return cronTrigger ("everwell-registration" , startRegistrationJob , registrationSchedule ,
232+ processMQJobForRegistration ().getObject ());
201233 }
202234
203235 // --------------------------------------------------------------------------------------------------------------
@@ -212,16 +244,8 @@ public JobDetailFactoryBean processMQJobForEverwellDataSync() {
212244
213245 @ Bean
214246 public CronTriggerFactoryBean processMQTriggerForEverwellDataSync () {
215- Boolean startJob = ConfigProperties .getBoolean ("start-everwelldatasync-scheduler" );
216- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
217- String scheduleConfig = quartzJobDefaultSchedule ;
218- if (startJob ) {
219- scheduleConfig = ConfigProperties .getPropertyByName ("cron-scheduler-everwelldatasync" );
220- }
221- cronTriggerFactoryBean .setJobDetail (processMQJobForEverwellDataSync ().getObject ());
222- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
223- cronTriggerFactoryBean .setGroup (quartzJobGroup );
224- return cronTriggerFactoryBean ;
247+ return cronTrigger ("everwell-datasync" , startEverwellDataSyncJob , everwellDataSyncSchedule ,
248+ processMQJobForEverwellDataSync ().getObject ());
225249 }
226250
227251 // --------------------------------------------------------------------------------------------------------------
@@ -236,16 +260,8 @@ public JobDetailFactoryBean processMQJobForCtiDataSync() {
236260
237261 @ Bean
238262 public CronTriggerFactoryBean processMQTriggerForCtiDataSync () {
239- Boolean startJob = ConfigProperties .getBoolean ("start-ctidatasync-scheduler" );
240- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
241- String scheduleConfig = quartzJobDefaultSchedule ;
242- if (startJob ) {
243- scheduleConfig = ConfigProperties .getPropertyByName ("cron-scheduler-ctidatasync" );
244- }
245- cronTriggerFactoryBean .setJobDetail (processMQJobForCtiDataSync ().getObject ());
246- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
247- cronTriggerFactoryBean .setGroup (quartzJobGroup );
248- return cronTriggerFactoryBean ;
263+ return cronTrigger ("cti-datasync" , startCtiDataSyncJob , ctiDataSyncSchedule ,
264+ processMQJobForCtiDataSync ().getObject ());
249265 }
250266
251267 // --------------------------------------------------------------------------------------------------------------
@@ -260,16 +276,8 @@ public JobDetailFactoryBean processMQJobForAvniRegistration() {
260276
261277 @ Bean
262278 public CronTriggerFactoryBean processMQTriggerForAvniRegistration () {
263- Boolean startJob = ConfigProperties .getBoolean ("start-avni-scheduler" );
264- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
265- String scheduleConfig = quartzJobDefaultSchedule ;
266- if (startJob ) {
267- scheduleConfig = ConfigProperties .getPropertyByName ("cron-avni-registration" );
268- }
269- cronTriggerFactoryBean .setJobDetail (processMQJobForAvniRegistration ().getObject ());
270- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
271- cronTriggerFactoryBean .setGroup (quartzJobGroup );
272- return cronTriggerFactoryBean ;
279+ return cronTrigger ("avni-registration" , startAvniRegistrationJob , avniRegistrationSchedule ,
280+ processMQJobForAvniRegistration ().getObject ());
273281 }
274282
275283 // --------------------------------------------------------------------------------------------------------------
@@ -284,17 +292,8 @@ public JobDetailFactoryBean processMQJobForNHMDashboardData() {
284292
285293 @ Bean
286294 public CronTriggerFactoryBean processMQTriggerForNHMDashboardData () {
287- Boolean startJob = ConfigProperties .getBoolean ("start-nhmdashboard-scheduler" );
288- CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean ();
289- String scheduleConfig = quartzJobDefaultSchedule ;
290- if (startJob ) {
291- scheduleConfig = ConfigProperties .getPropertyByName ("cron-scheduler-nhmdashboard" );
292- }
293- cronTriggerFactoryBean .setJobDetail (processMQJobForNHMDashboardData ().getObject ());
294- cronTriggerFactoryBean .setCronExpression (scheduleConfig );
295- cronTriggerFactoryBean .setGroup (quartzJobGroup );
296-
297- return cronTriggerFactoryBean ;
295+ return cronTrigger ("nhm-dashboard" , startNhmDashboardJob , nhmDashboardSchedule ,
296+ processMQJobForNHMDashboardData ().getObject ());
298297 }
299298
300299}
0 commit comments