001/*
002 * Copyright 2012-2017 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.springframework.boot.devtools.restart;
018
019/**
020 * Strategy used to handle launch failures.
021 *
022 * @author Phillip Webb
023 * @since 1.3.0
024 */
025@FunctionalInterface
026public interface FailureHandler {
027
028        /**
029         * {@link FailureHandler} that always aborts.
030         */
031        FailureHandler NONE = (failure) -> Outcome.ABORT;
032
033        /**
034         * Handle a run failure. Implementations may block, for example to wait until specific
035         * files are updated.
036         * @param failure the exception
037         * @return the outcome
038         */
039        Outcome handle(Throwable failure);
040
041        /**
042         * Various outcomes for the handler.
043         */
044        enum Outcome {
045
046                /**
047                 * Abort the relaunch.
048                 */
049                ABORT,
050
051                /**
052                 * Try again to relaunch the application.
053                 */
054                RETRY
055
056        }
057
058}