Sono completamente confuso su come il caricamento della classe avviene in tomcat. Quindi, per favore, sopportami se la mia domanda sembra stupida.Spring jar nella cartella lib tomcat
Distribuiamo più applicazioni web a molla su server singolo tomcat. Per ridurre l'ingombro della memoria, abbiamo pensato di disporre di file jar di primavera, di ibernazione e di database nella cartella di tomcat lib, in modo che fossero condivisi da tutte le applicazioni web.
Ho iniziato prima contrassegnando le dipendenze di molla come provided
e copiato quei vasi su tomcat lib. Ma all'avvio del server ho iniziato a ricevere più ClassNotFoundErrors
, come per commons-logging
, commons-fileupload
, jackson
, quindi ho dovuto spostare anche questi vasi per eseguire il backup di lib.
Ma poi questo ha iniziato a sentirsi pescoso. Che cosa succede se in futuro aggiungo un'altra dipendenza primaverile al mio progetto, ad esempio spring-data-cassandra. Avrei bisogno di spostare anche i suoi barattoli dipendenti? Questo potrebbe essere senza fine. Potrei anche ottenere errori CNF in fase di esecuzione.
Ho provato a seguire il collegamento this e ho riportato il contesto di primavera e il web di primavera alla guerra delle applicazioni. Ma non ha funzionato, ha ottenuto ClassNotFound su alcune classi durante l'inizializzazione WebApplicationIntializer
. Ho cercato di capire l'ordine di classes getting loaded in tomcat, ma non ho capito molto.
Quindi ho trovato una spiegazione completa diversa per JDBC driver loading che in qualche modo contraddice tutte le altre spiegazioni e mi ha lasciato completamente confuso.
Mentre leggevo di più, penso che non è un approccio giusto per spostare vasetti di primavera a lib Tomcat, ma ancora non hanno avuto un buon ragionamento. E allora perché funziona il driver JDBC? Qualcuno può spiegare per favore? Inoltre il classloader per ogni webapp crea una copia di ogni classe?
Modifica 1: sono venuto a sapere che alcune dipendenze sono optional
in vasetti di primavera e saranno necessarie se sono in uso nella mia webapp. Quindi spring-web dipende dalle librerie jackson
ma è opzionale per la mia app. Quindi ho bisogno di scoprire quali sono necessari tutti i barattoli per il mio progetto e sono richiesti anche per la primavera, quei vasi devono essere spostati su tom.
grazie per l'input. Sembra che le dipendenze che stavano creando un problema fossero 'facoltative'.Quindi è davvero difficile scoprire le dipendenze transitive di cui avrei bisogno – sidgate
Se usi Maven per costruire i tuoi WAR, esso raggruppa tutti i deft transitivi in artefatto WAR. –
non tutto, le dipendenze opzionali non sono incluse – sidgate