Необходимо вернуть значение из запланированного метода в Spring MVC - PullRequest
0 голосов
/ 28 августа 2018

Я пишу планировщик в своем веб-приложении для целей уведомления, задача моего планировщика проста: он попадет в стороннюю централизованную базу данных и будет искать доступность данных, если данные доступны, то он возвращает true, в противном случае - false.

Но я застрял здесь, я хочу показать уведомление на основе результата (true / false), возвращаемого моим планировщиком, но я не могу думать, как мне реализовать то же самое? Я думал о связывании переменной в сеансе, но поскольку это время, сеанс здесь невозможен.

Предположим, что планировщик возвращает true, теперь я хочу, чтобы это значение находилось на моей странице JSP (странице Dashboard), где я могу показать сообщение «Данные доступны» на панели пользователя. Мне нужно это значение для проверки условия

if(true)
"data is available"
else
no notification

Пожалуйста, посмотрите мой код и предложите мне.

package com.awzpact.uam.scheduler;

import com.awzpact.prayas.dao.HRMSPickSalaryDataDAO;
import com.awzpact.uam.domain.SalaryDetailReport;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class PayrollDataNotificationScheduler {

    private static  boolean AVAIL_STATUS = false;

    private static final Logger LOGGER = Logger.getLogger(PayrollDataNotificationScheduler.class);

    public boolean checkDataAvailability() {

        try {
            List<SalaryDetailReport> list = salaryDataDAO.findAll();
            if (list.size() > 0) {
                AVAIL_STATUS = true;
                return AVAIL_STATUS;
            }

            return false;
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.info("Data is not available for migrate");
            return false;
        }
    }
    @Autowired
    HRMSPickSalaryDataDAO salaryDataDAO;
}

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Если вы выполняете какие-либо данные, вы периодически запускаете запланированное задание - вы сохраняете его в своей БД.

// in your scheduled @Component
@Autowired
private SomeDataDAO someDataDAO;

@Scheduled(cron = "...")
public void fetchThirdPartyData() {

    SomeData thirdPartyData = getThirdPartyData();
    someDataDAO.save(thirdPartyData);
}

private SomeData getThirdPartyData() {
    // calling their API...
}

Затем вы создаете контроллер, который будет получать данные из базы данных (если существует, обратите внимание на интерфейс Optional - вы можете использовать это в своем методе DAO)

// a rest controller
@RestController
@RequestMapping("/someData")
public class SomeController {

    @Autowired
    private SomeDataDAO someDataDAO;

    @GetMapping
    public SomeData getSomeData() {
        return someDataDao.getSomeData().orElse(null);
    }

}

Теперь, когда вы входите в систему, вы делаете AJAX-вызов, в зависимости от того, что вы там используете, и затем вы можете проверить и распечатать сообщение.

0 голосов
/ 28 августа 2018

Планирование означает, что вы хотите выполнить некоторые действия по расписанию. Ожидание ответа больше похоже на обмен запросами / ответами между клиентом и сервером. Чтобы проверить, доступны ли данные - лучше использовать простой вызов метода через REST Controller и вообще не использовать планировщик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...