In the @PostConstruct doc it says about the annotated methods:
\"The method MUST NOT throw a checked exception.\"
How would one deal with e.g. an I
Generally, if you want or expect application start-up failure when one of your beans throws an exception you can use Lombok's @SneakyThrows
.
It is incredibly useful and succinct when used correctly:
@SneakyThrows
@PostConstruct
public void init() {
// I usually throw a checked exception
}
There's a recent write-up discussing its pros and cons here: Prefer Lombok’s @SneakyThrows to rethrowing checked exceptions as RuntimeExceptions
Enjoy!
Yes, wrap it in a runtime exception. Preferebly something more concrete like IllegalStateException
.
Note that if the init method fails, normally the application won't start.
Use a softened exception like so, in effect wrapping in RuntimeException: https://repl.it/@djangofan/SoftenExceptionjava
private static RuntimeException softenException(Exception e) {
return checkednessRemover(e);
}
private static <T extends Exception> T checkednessRemover(Exception e) throws T {
throw (T) e;
}
Then usage is like:
} catch (IOException e) {
throw softenException(e);
//throw e; // this would require declaring 'throws IOException'
}