Как создать источник данных без объединения в Tomcat - PullRequest
1 голос
/ 05 августа 2009

Я использую контекст JNDI для создания источника данных для драйверов JDBC в файле context.xml Tomcat следующим образом:

<Resource name="db/test" 
          type="javax.sql.DataSource" 
          driverClassName="com.test.jdbc.Driver"
          url="jdbc:fastdb://localhost:3306/session_db?autoReconnect=true&amp;connectTimeout=5000&amp;socketTimeout=5000"
          zeroDateTimeBehavior="convertToNull"
          username="dbuser"
          password="password"
          maxActive="100"
          maxWait="2"
          removeAbandoned="true"
          removeAbandonedTimeout="60"
          logAbandoned="true" />

По умолчанию Tomcat использует фабрику источников данных DBCP и создает источники данных пула. Конкретная база данных и драйвер, который мы используем, уже поддерживают пул на более низком уровне, а дополнительный пул фактически снижает производительность. Есть ли способ создать базовый источник данных (без объединения в пул) с использованием ресурса JNDI, подобного этому, чтобы я мог переключаться между различными базами данных с минимальными изменениями конфигурации?

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

Ответы [ 4 ]

2 голосов
/ 05 августа 2009

Не совсем уверен, если это то, что вас удовлетворит, но вы всегда можете использовать Поддержка Spring JDBC без использования источников данных, управляемых Tomcat.

0 голосов
/ 02 марта 2016

Я сделал это для соединения без пула Oracle, как это:

<Resource
        name="jdbc/aqds"
        auth="Container"
        type="oracle.jdbc.pool.OracleDataSource"
        factory="oracle.jdbc.pool.OracleDataSourceFactory"
        url="jdbc:oracle:thin:@localhost:1521:XE"
        user="MYUSER"
        password="MYPASSWORD" />
0 голосов
/ 06 августа 2009

Если вам действительно нужно только одно соединение, попробуйте установить intialSize в 1 и maxActive в 1 в вашей конфигурации DBCP .

В долгосрочной перспективе, если вы не хотите использовать пул соединений, не используйте JNDI для настройки источника данных, просто создайте его непосредственно в коде вашего веб-приложения.

Edit:

В своем комментарии вы говорите: «Это разрешает только одно соединение, и сервер сразу зависает, потому что каждый запрос ожидает соединения».

Да, если вы эффективно отключите пул, сделав пул размером 1, это то, что произойдет. Но заголовок вашего вопроса - «Как создать источник данных без объединения», поэтому я не совсем понимаю, чего именно вы пытаетесь достичь.

Мое предложение состоит в том, чтобы не использовать JNDI для определения ваших соединений (вся цель определения источника данных JNDI заключается в создании пула соединений между веб-приложениями). Вместо этого определите ваше соединение в коде сервлета для двух ваших случаев: один случай, который продолжает использовать DBCP, другой случай, который использует ваш другой низкоуровневый пул соединений.

0 голосов
/ 05 августа 2009

Предоставляет ли используемый драйвер JDBC реализацию javax.naming.spi.ObjectFactory или какой-либо другой объект подключения, который можно настроить с помощью org.apache.naming.factory.BeanFactory? Ни одно из этих решений не потребует написания собственного кода или добавления каких-либо дополнительных сторонних библиотек.

...