Spring запускает/уведомляет явно запланированный метод

Транзакциям нравятся продажи и покупки, созданные с помощью REST.

@Component
@Path("txns")
public class Transaction {

 @Path("/purchases")
 public Response postPurchaseTrnsaction(Transaction txn) {
    // persistence takes place here
 }

 @Path("/sales")
 public Response postSalesTrnsaction(Transaction txn) {
    // persistence takes place here
 }     
}

Существует отдельный процесс фоновой инвентаризации, который обновляет инвентаризацию SKU, проданных или приобретенных в результате вышеуказанных транзакций.

public class InventoryProcessor {

  @Scheduled(fixedRate = 900000,initialDelay = 3000) // 15 mins
  @Transactional
  public void doInventory() {
    // open Transactions, update inventory records
  }

}

Этот процесс выполняется каждые 15 минут. Однако всякий раз, когда поступают новые транзакции, необходимо явно активировать или уведомить метод InventoryProcessor doInventory для немедленного проведения инвентаризации.

Есть вариант весной.


person vels4j    schedule 14.03.2017    source источник


Ответы (2)


Можете ли вы внедрить InventoryProcessor в Transaction и вызвать метод программно? Или заверните вызов в другой метод с пометкой @Async, если это необходимо сделать асинхронно.

@Component
@Path("txns")
public class Transaction {

 @Inject
 private InventoryProcessor inventoryProcessor

 @Path("/purchases")
 public Response postPurchaseTrnsaction(Transaction txn) {
    // persistence takes place here

    inventoryProcessor.doInventory();
 }

 @Path("/sales")
 public Response postSalesTrnsaction(Transaction txn) {
    // persistence takes place here
 }     
}
person Gee2113    schedule 14.03.2017
comment
Вы можете уточнить немного больше - person vels4j; 14.03.2017
comment
Не может, запрос не может ждать завершения обработки инвентаризации. обработка инвентаризации — трудоемкий процесс - person vels4j; 15.03.2017

Вы можете реализовать шаблон наблюдателя, используя ApplicationEventPulistherAware в вашем обработчике инвентаризации, и ваши функции транзакций публикуют пользовательские события с помощью реализации ApplicationEventPublisher.

person Waleed Z.    schedule 14.03.2017