上文建立拉一个自定义数据连接池,本文介绍如何建立tomcat数据源,这是两种不同的取得数据库连接的方式,怎样才能尽量少的改动代码的情况下,增加对另一种胡支持呢? 用接口interface,提供一个getConnection的方法,然后可以有多种实现,改变连接只要改变实现就可以啦。
当然可以更灵活,把配置信息写在配置文件中,该配置文件就可以了。
接口如下:
- package com.mycompany.db;
- import java.sql.Connection;
- public interface SysDBitf {
- public Connection getConnection();
自定义连接实现如下:
- package com.mycompany.db;
- import java.sql.Connection;
- public class SelfDataSourceDB implements SysDBitf{
- public Connection getConnection() {
- return ConnPool.getCP().getConnection();
- }
- }
tomcat数据库连接实现如下:
- package com.mycompany.db;
- import java.sql.Connection;
- import java.sql.SQLException;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import javax.sql.DataSource;
- public class DataSourceDB implements SysDBitf{
- public Connection getConnection() {
- Context context = null;
- try {
- context = new InitialContext();
- } catch (NamingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //获得数据源
- DataSource ds = null;
- try {
- ds = (DataSource) context.lookup("java:comp/env/jdbc/mysql");
- } catch (NamingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- //获取连接
- Connection conn = null;
- try {
- conn = ds.getConnection();
- } catch (SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return conn;
- }
- }
mysql数据源配置在项目的META-INF目录下,文件名为context.xml
内容为:
- <Context path="/sclBlog" docBase="sclBlog"
- debug="5" crossContext="true" reloadable="false"
- cachingAllowed="true" cacheMaxSize="20480"
- cacheTTL="10000">
- <Resource name="jdbc/mysql" auth="Container" removeAbandoned="true"
- removeAbandonedTimeout="60" logAbandoned="true"
- type="javax.sql.DataSource" maxActive="50" maxIdle="10"
- maxWait="10000" username="root" password="root"
- driverClassName="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/sclBlog?autoReconnect=true" />
- </Context>
工作就完了,如果先换数据库连接只要改一行代码就可以:
- SysDBitf sdBitf= new DataSourceDB();