Tomcat registrazione driver postgresql

di il
5 risposte

Tomcat registrazione driver postgresql

Salve,

nella mia web application, con Tomcat quando tento di connettermi a postgresql ricevo sempre l'errore


"No suitable driver found for jdbc:postgresql://localhost:5432/..."


Il codice che uso per connettermi, se provato in locale va benissimo, mentre mi da problemi quando provo su tomcat.

Quindi la stringa di connessione è corretta.

Questo è il codice che uso per connettermi

Connection conn = null;
PreparedStatement parametersStatement = null;
ResultSet rSet = null;
conn = DriverManager.getConnection(strConn);

Uso maven, per importare la libreria postgresql

<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
 <groupId>org.postgresql</groupId>
 <artifactId>postgresql</artifactId>
 <version>42.7.5</version>
</dependency>

Da quello che ho capito non riesce a "caricare/registrare" il driver. Cosa che dovrebbe fare automaticamente in questo punto DriverManager.getConnection(strConn); come ripostato dalla documentazione ufficiale di postgresql    https://jdbc.postgresql.org/documentation/use/

"Applications do not need to explicitly load the org.postgresql.Driver class because the pgJDBC driver jar supports the Java Service Provider mechanism. The driver will be loaded by the JVM when the application connects to PostgreSQL® (as long as the driver’s jar file is on the classpath)."

Su tomcat nella cartella WEB-INF\lib è presente il driver ma non capisco perche fallisce la registrazione.

Se forzo la registrazione/caricamente del driver con


Class.forName("org.postgresql.Driver");

oppure con


DriverManager.registerDriver(new org.postgresql.Driver ());


Risolvo il problema di connessione ma ne sorge un'altro.
Tomcat inizia a spammare nella console un messaggio di warning, ovvero


WARNING [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [appname] registered the JDBC driver [org.postgresql.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

Evidentemente non è la soluzione giusta quella di forzare la registrazione del driver.

Se copio manualmente il driver di postgresql nella cartella di tomcat/lib, la connessione avviene ma solo dopo che ho refreshato la pagina ma nella console di tomcat ho sempre il messaggio di warning.

Detto questo, dove sbaglio??

Ringrazio anticipatamente per l'aiuto.

5 Risposte

  • Re: Tomcat registrazione driver postgresql

    Non è simpatico scrivere su tutti i forum contemporaneamente...

    https://forum.html.it/forum/showthread.php?threadid=2979556&postid=25583863#post25583863

  • Re: Tomcat registrazione driver postgresql

    Ciao,

    da una veloce ricerca... hai provato in questo modo ?

    DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/MyDb");
    Connection conn = ds.getConnection();
    
  • Re: Tomcat registrazione driver postgresql

    27/04/2025 - oregon ha scritto:

    Non è simpatico scrivere su tutti i forum contemporaneamente...

    https://forum.html.it/forum/showthread.php?threadid=2979556&postid=25583863#post25583863

    Ops... non mi ero accorto del crossposting

  • Re: Tomcat registrazione driver postgresql

    27/04/2025 - oregon ha scritto:

    Non è simpatico scrivere su tutti i forum contemporaneamente...

    https://forum.html.it/forum/showthread.php?threadid=2979556&postid=25583863#post25583863

    Ed è una regola che ho sempre seguito dai tempi di MasterDrive. Su Html, cerano ben 2 miei post duplicati che non so per quale motivo/problema del sito, che al momento dell'invio della discussione, mi dava sempre errore e non mi ha più ricaricato la pagina/sito. Ho dato per scontato che non fossi riuscito a creare la discussione e cosi ho deciso di scrivere qui. 

    Detto questo chiedo scusa, non era mia intenzione.

  • Re: Tomcat registrazione driver postgresql

    27/04/2025 - By65Franco ha scritto:

    Ciao,

    da una veloce ricerca... hai provato in questo modo ?

    DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/MyDb");
    Connection conn = ds.getConnection();
    

    Si ma niente, alla fine ho risolto impostando la scope della libreria dentro al pom a provided

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.7.5</version>
        <scope>provided</scope>  <!-- QUI -->
    </dependency>

    In questo modo la libreria NON viene aggiunta nella cartella ...\WEB-INF\lib

    Poi ho copiato manualmente la libreria nella cartella c:\\tomcat-10.1.40\lib

    Riavviato il tutto e sembra funzionare.

Devi accedere o registrarti per scrivere nel forum
5 risposte