webentwicklung-frage-antwort-db.com.de

SEVERE: Es können keine ersten Poolverbindungen erstellt werden - Tomcat 7 mit der Datei context.xml

Ich habe versucht, das Projekt auf Tomcat 7.0.52 auszuführen und die DB über die context.xml-Datei zu initialisieren.

Aber es gibt eine Reihe von Ausnahmen, ich konnte nicht herausfinden, was da los ist.

Hier ist die Konsolenausgabe:

Java.sql.SQLException: com.mysql.jdbc.Driver
    at org.Apache.Tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.Java:254)
    at org.Apache.Tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.Java:182)
    at org.Apache.Tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.Java:701)
    at org.Apache.Tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.Java:635)
    at org.Apache.Tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.Java:486)
    at org.Apache.Tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.Java:144)
    at org.Apache.Tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.Java:116)
    at org.Apache.Tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.Java:103)
    at org.Apache.Tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.Java:554)
    at org.Apache.Tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.Java:242)
    at org.Apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.Java:141)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.Java:321)

Hier ist vollständige Stack-Trace .

Hier wird ausgegeben in Tomcat Catalina Log

ausschnitt aus web.xml:

<resource-ref>
    <description>Travel Agency Datasource</description>
    <res-ref-name>jdbc/onlinedb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

context.xml:

<Context>
    <Resource name="jdbc/onlinedb"
              type="javax.sql.DataSource"
              factory="org.Apache.Tomcat.jdbc.pool.DataSourceFactory"
              maxActive="20" maxIdle="10"
              maxWait="-1"
              username="root"
              password="secret"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/travelagency?characterEncoding=utf8"/>
</Context>

ConnectionManager Klasse:

public class ConnectionManager {
    private static Logger log = Logger.getLogger(ConnectionManager.class);

    public static Connection getConnection() throws SQLException {
        Connection con = null;
        try {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup("Java:/comp/env");
            DataSource datasource = (DataSource) envContext.lookup("jdbc/onlinedb");
            con = datasource.getConnection();
        } catch (NamingException e) {
            log.error(e);
        }
        return con;
    }
}

mysql-connector-Java-5.1.27-bin.jar wird zu cp hinzugefügt:

travel

Ich habe versucht, den Inhalt der Datei context.xml zu ändern:

<resource-env-ref>
        <description>Travel Agency Datasource</description>
        <resource-env-ref-name>jdbc/onlinedb</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>

Aber es versagt immer wieder.

So lösen Sie dieses Problem?

9
nazar_art

Sie müssen dem Klassenpfad einen MySQL-Jdbc-Treiber hinzufügen.

Legen Sie entweder eine binäre MySQL-Dose in den Ordner Tomcat lib oder fügen Sie sie dem Ordner WEB-INF/lib der Anwendung hinzu.

Sie finden das binäre jar (Version entsprechend ändern): https://mvnrepository.com/artifact/mysql/mysql-connector-Java/5.1.27

11
WeMakeSoftware

Wenn Sie auf Ausnahmen wie diese stoßen, befinden sich die nützlichsten Informationen im Allgemeinen am unteren Rand der Stapelverfolgung:

Caused by: Java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  at Java.net.URLClassLoader$1.run(URLClassLoader.Java:366)
  ...
  at org.Apache.Tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.Java:246)

Das Problem ist, dass Tomcat com.mysql.jdbc.Driver nicht finden kann. Dies wird normalerweise dadurch verursacht, dass sich die JAR-Datei mit dem MySQL-Treiber nicht dort befindet, wo sie von Tomcat erwartet wird (nämlich im Verzeichnis webapps/<yourwebapp>/WEB-INF/lib).

4
matt b

Ich habe mich auch mit dieser Ausnahme befasst, nachdem ein vollständig funktionierendes context.xml-Setup angepasst wurde. Ich wollte keine Umgebungsdetails in der Datei context.xml, also habe ich sie herausgenommen und diesen Fehler gesehen. Mir wurde klar, dass ich diese Datenquellenressource vollständig in Code erstellen muss, der auf System Property JVM -D args basiert.

Ursprünglicher Fehler, wenn nur user/pwd/Host entfernt wurde: Org.Apache.Tomcat.jdbc.pool.ConnectionPool init SEVERE: Die ersten Poolverbindungen können nicht erstellt werden.

Der gesamte Inhalt von context.xml wurde entfernt. Versuchen Sie Folgendes: Initialisieren Sie das Datenquellenobjekt beim Start des App-Servers, bevor Sie die erste Verbindung verwenden. Bei Verwendung von Spring ist dies in einer @Configuration-Bean im @Bean-Datenquellenkonstruktor sinnvoll.

zu verwendendes Paket: org.Apache.Tomcat.jdbc.pool. *

PoolProperties p = new PoolProperties();
p.setUrl(jdbcUrl);
            p.setDriverClassName(driverClass);
            p.setUsername(user);
            p.setPassword(pwd);
            p.setJmxEnabled(true);
            p.setTestWhileIdle(false);
            p.setTestOnBorrow(true);
            p.setValidationQuery("SELECT 1");
            p.setTestOnReturn(false);
            p.setValidationInterval(30000);
            p.setValidationQueryTimeout(100);
            p.setTimeBetweenEvictionRunsMillis(30000);
            p.setMaxActive(100);
            p.setInitialSize(5);
            p.setMaxWait(10000);
            p.setRemoveAbandonedTimeout(60);
            p.setMinEvictableIdleTimeMillis(30000);
            p.setMinIdle(5);
            p.setLogAbandoned(true);
            p.setRemoveAbandoned(true);
            p.setJdbcInterceptors(
              "org.Apache.Tomcat.jdbc.pool.interceptor.ConnectionState;"+
              "org.Apache.Tomcat.jdbc.pool.interceptor.StatementFinalizer");
            org.Apache.Tomcat.jdbc.pool.DataSource ds = new org.Apache.Tomcat.jdbc.pool.DataSource();
            ds.setPoolProperties(p);
            return ds;
2
bjm88

Ich benutze Sprint-Boot (2.1.1) und MySQL-Version ist 8.0.13. Ich füge Abhängigkeit in pom hinzu, löse mein Problem. 

 <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-Java</artifactId>
      <version>8.0.13</version>
 </dependency>

MySQL Connector/J »8.0.13-Verknüpfung: https://mvnrepository.com/artifact/mysql/mysql-connector-Java/8.0.13
MySQL Connector/J »Link zur gesamten Version: https://mvnrepository.com/artifact/mysql/mysql-connector-Java

0
Zgpeace