Обычная практика заключается в настройке этого параметра как DataSource
в рассматриваемом контейнере сервлета .Он предоставит вам средства для объединения подключений, которые значительно улучшат производительность.Также распространенной практикой является вывод необработанных настроек в некоторый файл конфигурации, который находится в пути к классам.
В случае, если вы используете Tomcat в качестве сервлет-контейнера, вам необходимо настроить источник данныхсогласно его документации JNDI .Вы увидите, что есть несколько способов.Самый простой способ - создать /META-INF/context.xml
в веб-контенте вашего динамического веб-проекта (чтобы быть понятным, /META-INF
находится на том же уровне, что и /WEB-INF
веб-приложения) и заполнить его чем-то вроде:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/db" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
url="jdbc:mysql://hostname.com/db"
driverClassName="com.mysql.jdbc.Driver"
username="user" password="pass"
/>
</Context>
Это примерно означает, что сервер Tomcat должен создать источник данных с именем JNDI jdbc/db
с максимум 100 активными соединениями, максимум 30 бездействующими соединениями и максимальное время ожидания 10000миллисекунды до того, как соединение должно быть возвращено из вашего приложения (фактически: закрыто вашим приложением, поэтому ваше приложение имеет 10 секунд времени между установлением соединения и закрытием соединения).Остаток настроек должен быть вам знаком и достаточно понятен;это настройки JDBC.
Наконец, в вашем веб-проекте отредактируйте файл /WEB-INF/web.xml
, добавив следующую запись:
<resource-env-ref>
<resource-env-ref-name>jdbc/db</resource-env-ref-name>
<resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>
Это примерно означает, что веб-приложение должно использовать сервер-предоставленный источник данных с именем jdbc/db
.
Затем измените свой менеджер соединений на что-то вроде этого:
private DataSource dataSource;
public Database(String jndiname) {
try {
dataSource = (DataSource) new InitialContext().lookup("java:comp/env/" + jndiname);
} catch (NamingException e) {
// Handle error that it's not configured in JNDI.
throw new IllegalStateException(jndiname + " is missing in JNDI!", e);
}
}
public Connection getConnection() {
return dataSource.getConnection();
}
.. и замените все Class.forName(driver)
вызовы на new Database("jdbc/db")
и замените всеDriverManager.getConnection()
звонки по database.getConnection()
.При необходимости вы можете получить значение jdbc/db
из некоторого файла конфигурации ( Файл свойств? ).
В качестве альтернативы, введите DataSource
через @Resource
аннотация внутри управляемого артефактом контейнера, такого как @WebServlet
класс сервлета:
@Resource("jdbc/db")
private DataSource dataSource;
Так и должно быть.Просто разверните ваше веб-приложение с вышеуказанными изменениями и запустите его.Не забудьте поместить драйвер JDBC базы данных в Tomcat/lib
или добавить его путь к свойству shared.loader
Tomcat/conf/catalina.properties
, поскольку теперь ответственность за загрузку драйвера JDBC переходит с веб-приложения на сервер.Дополнительные советы и другие базовые примеры JDBC / JNDI вы можете найти этой статьей также полезной.
См. Также: