public Flux<MyObj> getFlux() {
String query = "select * from............................'";
Flux<MyObj> res = Flux.create(
sink -> sink.onRequest(r ->
{
try (Connection con = dataSource.getConnection()) {
final Statement statement = con.createStatement();
final ResultSet rs = statement.executeQuery(query);
while (rs.next()) {
sink.next(MyObj.builder()
// билдим объект
.build());
System.out.println("создаём объект");
}
sink.complete();
} catch (SQLException e) {
e.printStackTrace();
}
}
));
System.out.println("выходим из метода");
return res;
}
} catch (SQLException e) {
e.printStackTrace();
sink.error(e);
// или так:
// sink.error(new Exception("Database Problem. Query: '" + query + "'. Exception: " + e.getMessage()));
}
@Test
public void shouldGetAllMyObj() throws Exception {
AtomicReference<String> err = new AtomicReference<>();
final Flux<MyObj> myObjList;
myObjList = myRepo.getAllMyObj();
myObjList.subscribe(
item -> { обработка валидных объектов },
error -> err.set(error.getMessage()) // здесь ловим ошибку
);
System.out.println(err.get());
if (err.get() != null) throw new Exception(err.get()); // например, можем бросить исключение
}
sink
есть методы для описания того что надо делать при ошибке: завершить, продолжить, сделать повторный запрос и т.д. public Flux<MyObj> getFlux() {
String query = "select * from............................'";
return Flux.create(
sink -> sink.onRequest(r ->
{
try (Connection con = dataSource.getConnection()) {
final Statement statement = con.createStatement();
final ResultSet rs = statement.executeQuery(query);
while (rs.next()) {
sink.next(MyObj.builder()
// билдим объект
.build());
}
sink.complete();
} catch (SQLException e) {
e.printStackTrace();
}
}
));
}
try - catch
получается сделать только внутри create()
, иначе идут ошибки из-за необработанных исключений. Но мне бы хотелось пробрасывать исключение наружу метода getFlux()
чтобы, например, давать 500-ю ошибку внешнему сервису. 3
? Какие ещё могут быть числа (диапазон) и как их надо интерпретировать? К тебе джейсон приход, каким боком тут вообще строка?
в чём проблема пройтись рекурсивно по всем элементам и возвращать TreeItem
<TreeItem ...></TreeItem>
, но не могу <TreeItem ...> логика </TreeItem>
(или пока просто не понимаю как).
Удачи!
ЗЫ: по стажировкам - их таки есть. Мне периодически прилетают, я их выкладываю в чат на JavaRush. Или в Яндекс попробуй. Но там на входе алгоритмические задачи. Ещё я посмотрел их "Открытый лекторий" - мне вообще не понравилось: преподы предельно странные. Думаю, другие компании (Титькоф там и пр.), а также галеры тоже что-то такое проводят, ищи на их сайтах.