У меня есть этот запрос SQL, который используется в приведенном ниже коде.
SELECT STATUS FROM STATUS_CHECK WHERE uniqueuId = ?
Различные значения STATUS: NOT STARTED
, RUNNING
, COMPLETE
, ERROR
.
Мне нужно время от времени проверять значение STATUS и выполнять некоторые операции, как только я найду COMPLETE
, и задаться вопросом, какой подход я должен использовать для достижения своей задачи.Любые идеи, в каком направлении я мог бы продолжить?
Прямо сейчас, в коде ниже, я вижу только NOT STARTED
, и мой код завершается. И я не уверен, как проверить статус без повторного вызова веб-службы послекогда-нибудь, чтобы убедиться, что он изменился на COMPLETE
, чтобы я мог выполнить с ним некоторые операции.
Допустим, у меня есть следующий контроллер, DAO и DAoImple, чтобы получить STATUS
Контроллер:
@RequestMapping(value = "/statusCheck", method = RequestMethod.POST)
public void statusCheck
(
@RequestParam(value = "id", defaultValue = "") String id
) {
try {
StatusDao sDao = (StatusDao) context.getBean("sDao");
sDao.statusLookUp(id);
} catch (Throwable th) {th.printStackTrace();}
}
Объект доступа к данным (DAO):
public interface StatusDao {
void statusLookUp(String id) throws DaoException;
}
DAO Impl:
public class StatusDaoImpl implements StatusDao {
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void statusLookUp(String id) throws DaoException {
DataSource ds = null;
Connection conn = null;
PreparedStatement pstmt = null;
CallableStatement cStmt = null;
ResultSet rs = null;
try {
ds = jdbcTemplate.getDataSource();
conn = ds.getConnection();
cStmt = conn.prepareCall("{call STATUS_RETRIEVER.GET_STATUS(?)}");
cStmt.setString(1, id);
cStmt.registerOutParameter(2, Types.VARCHAR);
int uniqueId = cStmt.getInt(2);
pstmt = conn.prepareStatement("SELECT STATUS FROM STATUS_CHECK WHERE uniqueuId=?");
pstmt.setInt(1, uniqueId);
rs = pstmt.executeQuery();
rs.next();
String status = rs.getString("STATUS");
System.out.println("The status received is as follows:");
System.out.println(status);
} catch (Throwable th) {
throw new DaoException(th.getMessage(), th);
}
}
}