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>
(или пока просто не понимаю как).
Компании выгоднее брать молодых и опытных. А таких мало, на всех не хватает. Молодые могут быть (а могут и не быть!) более активными, это да. Но их активность часто как тот пар, который в свисток. Старые более рациональны и быстрее находят решение незнакомой проблемы. Старому чтобы хорошо работать не надо перерабатывать. Ему не надо мучаться похмельем после гулянок. А ещё ему не надо менять работу раз в полгода.