tôi sử dụng nước rút khởi động 1.3, mùa xuân 4,2Schedule một nhiệm vụ với Cron cho phép cập nhật động
Trong lớp này
@Service
public class PaymentServiceImpl implements PaymentService {
....
@Transactional
@Override
public void processPayment() {
List<Payment> payments = paymentRepository.findDuePayment();
processCreditCardPayment(payments);
}
}
Tôi muốn gọi processPayment mỗi x giây phút.
Khoảnh khắc x này được đặt trong cơ sở dữ liệu. Người dùng có thể sửa đổi nó.
Vì vậy, tôi nghĩ rằng tôi không thể sử dụng ký hiệu.
tôi bắt đầu này này
@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;
}
Có lẽ nó không phải là cách tốt.
Bất kỳ đề xuất nào?
Không biết nếu để có được bối cảnh của tôi nếu tôi cần phải tạo ra một tài sản như
@Autowired
ConfigurableApplicationContext context;
và sau trong chính
public static void main(String[] args) {
context = SpringApplication.run(MyApp.class, args);
}
tôi tìm kiếm để có thể phản ánh thay đổi mà không cần khởi động lại ứng dụng. –
Cập nhật mã java để có cron động. Hy vọng bạn đặt đủ bảo vệ trên mục nhập db, để không ai làm hỏng nó lên. – Shibashis
Thích cơ chế. Chúng ta có cách nào để cập nhật cron khi nguồn (tập tin thuộc tính bên ngoài, thay đổi db, vv) thay đổi không? – Divs