抛出异常终止Spring应用程序启动

时间:2015-09-28 08:32:13

标签: spring

My Spring应用程序依赖于在应用程序启动之前需要设置的某些环境变量。

例如。考虑以下控制器:

@Controller
public class FileUploadController {

    /** Path to which all data will be uploaded **/
    private Path appDataPath;

    public FileUploadController(){
        // Extract the App Data path from environment variables
        Map<String, String> environmentVariables = System.getenv();

        if (environmentVariables.containsKey("MYAPP_DATA_DIR")) {
            String dataPath = environmentVariables.get("MYAPP_DATA_DIR");
            appDataPath = Paths.get(dataPath);
        } else {
            // TODO: Throw an exception to terminate app
        }
    }
}

我需要在上面的代码中引入什么异常来终止应用程序启动?

2 个答案:

答案 0 :(得分:3)

您正在使事情变得复杂,或者只是为路径注入String并使用@Value注释或注入Environment并使用getRequiredProperty其中任何一个将自动终止应用程序的启动。

@Controller
public class FileUploadController {

    @Value("${MYAPP_DATA_DIR}"
    private String dataPath;

    private Path appDataPath;


    @PostConstruct
    public void init() {
        appDataPath = Paths.get(dataPath);
    }
}

或者只是在Environment方法中使用@PostConstruct抽象。

@Controller
public class FileUploadController {

    @Autowired
    private Environment env;

    private Path appDataPath;

    @PostConstruct
    public void init() {
        appDataPath = Paths.get(env.getRequiredProperty("MYAPP_DATA_DIR"));
    }
}

未定义属性时,两者都会自动爆炸。

答案 1 :(得分:-1)

Spring Framework是Java Enterprise Container的一个实现!

根据Java Enterprise Containers的定义,您需要抛出RuntimeException的子类!它们不需要由容器或调用代码处理。

如果您的强制环境变量未设置且您的应用程序根本无法启动,则需要通知并退出。

我会从RuntimeException创建一个SubClass异常并使用该Exception类!

如果你的spring Framework实现有一些严格的要求(即RuntimeException的一些Spring子类,ApplicationException ...),那么你可以继承该类。但我不认为春天在这个问题上是限制性的......