Come dovrei gestire le eccezioni selezionate e non selezionate nel metodo Java Config @Bean per visualizzare una causa intuitiva dell'errore?[duplicare]

StackOverflow https://stackoverflow.com//questions/25004905

Domanda

Sto sviluppando una piccola applicazione da riga di comando basata su spring boot.La classe principale ha un campo con annotazioni @Autowired @Autowired Repository repository; la cui ricetta di costruzione è fornita nella classe Java Config che ha un metodo appropriato con annotazioni @Bean @Bean Repository repository(){...}.

Il metodo @Bean-annotated contiene codice che può generare eccezioni controllate e non controllate.@Bean Repository repository(){...//exceptions}

Il mio obiettivo è creare un'applicazione facile da usare che registri brevi messaggi al livello di registrazione appropriato anziché a lunghe tracce di stack.

Attualmente, un'eccezione nel metodo con annotazioni @Bean di Java Config fa sì che l'applicazione venga chiusa con o.s.boot.SpringApplication: Application startup failed messaggio e un'analisi dello stack molto lunga.

Mi chiedo se esista un buon modo per gestire almeno le eccezioni tipiche (di cui sono a conoscenza) nel metodo con annotazioni @Bean di Java Config per registrare brevi messaggi intuitivi utili per la risoluzione dei problemi.

Presumo che una tale strategia preveda l'aggiunta di codice di gestione delle eccezioni alla classe Java Config, ma non ho mai visto tale codice nelle classi Java Config disponibili pubblicamente, il che suggerisce che il codice di gestione delle eccezioni nelle classi Java Config potrebbe essere una cattiva pratica.

Grazie.

È stato utile?

Soluzione

Penso che tu abbia alcune opzioni qui, e quale sia la migliore dipende in gran parte dalle preferenze personali e dalla struttura della tua applicazione.

Un'opzione potrebbe essere quella di eseguire tutta la convalida dell'input prima di chiamare SpringApplication.run().Funzionerebbe per qualsiasi argomento della riga di comando, ma nella migliore delle ipotesi sarebbe complicato per qualsiasi cosa configurata tramite application.properties.

Piuttosto che lanciare eccezioni dal tuo @Bean metodi, potresti catturarli e gestirli in modo appropriato.Se il problema è di lieve entità, è possibile registrare un messaggio informativo o di avviso che spiega il problema e consentire all'applicazione di continuare.Se il problema è catastrofico, potresti registrare un messaggio di errore e poi chiamare System.exit().Anche se ciò fornirà una segnalazione degli errori intuitiva per eventuali eccezioni generate durante il tuo @Bean vengono chiamati i metodi, ti rimarranno comunque le tracce dello stack per eventuali eccezioni che si verificano successivamente.

Infine, potresti concludere la chiamata a SpringApplication.run() in un blocco try-catch.È quindi possibile esaminare l'eccezione rilevata e la catena di cause per determinare un messaggio di errore appropriato da registrare.Il vantaggio di questo approccio è che consentirà di fornire un messaggio di errore intuitivo per qualsiasi eccezione causata SpringApplication.run() fallire, non solo uno che viene lanciato dall'interno di uno dei tuoi @Bean metodi.

Supponendo che ci siano argomenti della riga di comando da convalidare, probabilmente utilizzerei una combinazione della prima e della terza opzione.Per il primo utilizzerei una libreria CLI come JOpt Simple per rendere le cose un po' più semplici.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top