Пул соединений Tomcat и JDBC - PullRequest
       22

Пул соединений Tomcat и JDBC

10 голосов
/ 09 февраля 2012

Я пытаюсь настроить пул соединений для базы данных mysql с tomcat.Мое простое приложение называется Projekt, в моем Projekt.xml в Apache / conf / Catalina / localhost у меня есть

<Context docBase="Projekt.war" path="/Projekt">
  <Resource name="jdbc/mysqldb"
      auth="Container"
  factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
      type="javax.sql.DataSource"
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost:3306/Music"
      username="andrzej"
      password="qazxsw"
      maxActive="20"
      maxIdle="30"
      maxWait="5"
  />
</Context> 

web.xml моего приложения

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>org.jtp.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/Hai</url-pattern>
</servlet-mapping>

<resource-ref>     
        <description>DB Connection</description>     
       <res-ref-name>jdbc/mysqldb</res-ref-name>     
       <res-type>javax.sql.DataSource</res-type>     
       <res-auth>Container</res-auth>     
 </resource-ref>

и в моем ApacheПапка / lib У меня есть

mysql-connector-java-5.1.18-bin.jar

, но когда я выполняю этот код:

Context initContext  = new InitialContext();
dataSource = (DataSource)initContext.lookup("java:comp/env/jdbc/mysqldb");
System.out.println(dataSource.getConnection().createStatement().
            execute("select * from Users"));

я получаю исключение

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

Теперь я озадачен, в некоторых местахЯ читал, что это может быть вызвано не помещением драйвера в tomcat / lib, но он у меня есть, и он работает, потому что когда я тестировал драйвер с ручным подключением, он работал.

Для моей настройки я пытался следоватьhttp://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

РЕДАКТИРОВАТЬ: Наконец-то все заработало, мне показалось, что в одном из файлов у меня осталось несколько контекстных тегов, поэтому при анализе он переопределил другие атрибуты, так что в конце концов это моя ошибка.

Ответы [ 2 ]

16 голосов
/ 26 марта 2013

Для создания пула соединений JDBC с Tomcat существует альтернатива файлам конфигурации XML . Мне никогда не удавалось заставить работать эти теги Context и resource-ref . Кроме того, эти теги излишни, если вам не нужны функции JNDI .

Альтернативой является использование Java-кода для настройки Пул соединений JDBC Tomcat. См. Пример кода в разделе Обычная Java на странице документации Tomcat 7, Пул соединений Tomcat JDBC .

По сути, вы:

  1. Создание объекта PoolProperties для хранения ваших настроек (URL-адрес базы данных, имя пользователя БД, пароль БД и т. Д.).
  2. Создание объекта Tomcat DataSource при передаче объекта PoolProperties из шага № 1, описанного выше.

Легко, peasy. Вот так ...

PoolProperties p = new PoolProperties();
p.setUrl( jdbc:postgresql://localhost:5432/" + "my_database_name" );
p.setDriverClassName( "org.postgresql.Driver" );
p.setUsername( "someUserName" );
p.setPassword( "somePassword" );
…
DataSource datasource = new org.apache.tomcat.jdbc.pool.DataSource( p );
datasource.setPoolProperties(p);

Для использования источника данных…

Connection conn = null;
try {
    conn = datasource.getConnection();
    …

Экземпляр DataSource может храниться:

11 голосов
/ 09 февраля 2012

Похоже, вы пропали без вести Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI поиск должен быть сделан так:

// Obtain our environment naming context
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");

// Look up our data source
DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB");

// Allocate and use a connection from the pool
Connection conn = ds.getConnection(); 

документация от http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...