Код: Выделить всё
try{
return mongoTemplate.findAndModify(query, update, collection)
} catch (DataAccessException ex) {
throw new CustomDatabaseException(String.format("Failed to find and modify xxx with identifier %s with exception %s: %s", identifer, ex.getClass(), ex.getMessage()));
}
< /code>
Это простой пример, но для некоторых вещей, которые я там делаю, больше вовлечен в построение пользовательского исключения, что делает немного раздражающим, чтобы повторить то же самое в базе кода. Я хотел бы добавить контекст к исключению на самом низком уровне, чтобы я мог построить пользовательский читаемый сообщение об ошибке, когда он пузырится через стек. Добавить. PrettyPrint-Override ">return CustomTryCatch.tryDBOperation(String.format("Update xxx object with identifier %s", identifier), () -> {
return mongoTemplate.findAndModify(query, update, collection);
})
public class CustomTryCatch{
public static V tryDBOperation(String dbActionDescription, Callable operation) {
try{
return operation.call();
} catch (Exception ex) {
throw new CustomDatabaseException(String.format("Failed to perform database action \"%s\" with exception \"%s:%s\"))
}
}
}
< /code>
Тестирование этого, кажется, дает именно то, что я хочу, но я не могу найти подобную технику где -либо еще, и я хотел пропустить эту идею на случай, если есть большая проблема с этим, особенно потому, что я не использовал Callable < /code> s. Повторно используйте try-finally Construction с возвратом
Могу ли я принять это, что этот шаблон разумный тогда? Вопрос довольно старый, поэтому мне было бы любопытно узнать, изменилось ли что -нибудь с тех пор.
Подробнее здесь: https://stackoverflow.com/questions/795 ... le-in-java