Я рекомендую использовать пул соединений, обрабатываемый контейнером, в котором запущено ваше веб-приложение. Вам не нужно заботиться о соединении, контейнер делает это за вас.
Если вам нужны только параметры конфигурации, предполагается, что web.xml возьмет их и сделает их доступными в вашем веб-приложении.
Как пример с Tomcat и MySQL.
Имя моего источника данных будет jdbc / mydb
1) отредактируйте файл contect.xml в каталоге META-INF и добавьте
<Resource auth="Container"
name="jdbc/mydb"
type="javax.sql.DataSource"
username="username" password="aC00l6a55w0rd"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/DBNAME"/>
2) отредактируйте ваш web.xml в каталоге WEB-INF и добавьте
<resource-ref>
<description>application Database</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3) теперь в вашем Java-коде вы можете получить соединение из пула соединений контейнеров. В этом примере я использую JSF и управляемый компонент:
Connection con = null;
try {
Context ctx = new InitialContext();
//FacesContext fctx = FacesContext.getCurrentInstance();
DataSource ds = (DataSource) ctx.lookup("java:/comp/env/jdbc/mydb");
con = ds.getConnection();
// do some database things, like read-write-update or whatever
} catch ( SQLException sqlex ) {
System.out.println(getClass().getName() + " SQL Exception: " + sqlex.getMessage();
} catch (NamingException nmex) {
System.out.println(getClass().getName() + " Nameing Exception: " + nmex.getMessage();
} finally (
try {
if ( con != null ) {
con.close();
}
catch ( SQLException e) {
System.out.println(getClass().getName() + " closing Exception: " + e.getMessage();
}
}
Важно закрыть все DB-объекты, такие как ResultSet, PreparedStatement и соединение с бесплатными DB-Ressources. На самом деле диспетчер соединений не закрывает соединение. И сможет передать уже открытое соединение следующему потребителю.
Надеюсь, это поможет