uso avvio sprint 1.3, 4.2 mollaSchedule un'attività con Cron che consente l'aggiornamento dinamico
In questa classe
@Service
public class PaymentServiceImpl implements PaymentService {
....
@Transactional
@Override
public void processPayment() {
List<Payment> payments = paymentRepository.findDuePayment();
processCreditCardPayment(payments);
}
}
desidero chiamare ProcessPayment ogni x istante.
Questo x momento è impostato in un database. L'utente può modificarlo.
Quindi penso di non poter usare l'anotazione.
ho iniziato a questo questo
@EntityScan(basePackageClasses = {MyApp.class, Jsr310JpaConverters.class})
@SpringBootApplication
@EnableCaching
@EnableScheduling
public class MyApp {
@Autowired
private DefaultConfigService defaultConfigService;
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
@Bean
public TaskScheduler poolScheduler() {
SimpleAsyncTaskExecutor taskScheduler = new SimpleAsyncTaskExecutor();
DefaultConfigDto defaultConfigDto = defaultConfigService.getByFieldName("payment-cron-task");
String cronTabExpression = "0 0 4 * * ?";
if (defaultConfigDto != null && !defaultConfigDto.getFieldValue().isEmpty()) {
cronTabExpression = "0 0 4 * * ?";
}
appContext.getBean("scheduler");
taskScheduler.schedule(task, new CronTrigger(cronTabExpression));
return scheduler;
}
Forse non è la strada buona.
Qualche suggerimento?
Non so se per ottenere il mio contesto, se ho bisogno di creare una proprietà come
@Autowired
ConfigurableApplicationContext context;
e un dopo nella principale
public static void main(String[] args) {
context = SpringApplication.run(MyApp.class, args);
}
i ricerca per essere in grado di riflettere dinamicamente la modifica senza riavviare l'applicazione. –
Aggiornato il codice java per avere cron dinamico. Spero che tu metta abbastanza guardie sul db entry, in modo che nessuno lo incasini. – Shibashis
Mi piace il meccanismo. Abbiamo un modo per aggiornare il cron quando l'origine (file delle proprietà esterne, modifiche db, ecc.) Cambia? – Divs