项目中关于数据库的连接,一般都采用数据源的方式。反正这次是自己实现,没有其他的要求,就在网上找了一个好点的数据源的实现。看了好几篇文章,都说 Proxool 比较好,就采用它来实现数据源吧。下面来实现:
1,在项目中的 WEB-INF 目录下建立 proxool.xml 文件(在其他目录也行,只要能找到就行),内容为:
- <?xml version="1.0" encoding="UTF-8"?>
- <proxool>
- <!-- 数据库连接别名,通过 proxool.15DayWeb 来获取此连接 -->
- <alias>15DayWeb</alias>
- <!-- 数据库驱动 -->
- <driver-url>jdbc:mysql://localhost:3306/15dayweb</driver-url>
- <!-- 驱动程序类 -->
- <driver-class>com.mysql.jdbc.Driver</driver-class>
- <!-- 联机数据库的用户和密码 -->
- <driver-properties>
- <property name="user" value="root" />
- <property name="password" value="root" />
- </driver-properties>
- <!-- 最小连接数量,建议设置0以上,保证第一次连接时间 -->
- <minimum-connection-count>2</minimum-connection-count>
- <!-- 最大连接数量,如果超过最大连接数量则会抛出异常
- 连接数设置过多,服务器CPU和内存性能消耗很大 -->
- <maximum-connection-count>20</maximum-connection-count>
- <!-- 某一时间点的最大连接数 -->
- <simultaneous-build-throttle>10</simultaneous-build-throttle>
- <!-- 一次性产生连接的数量 -->
- <prototype-count>2</prototype-count>
- <!-- 连接最大时间活动 默认5分钟 单位:秒 -->
- <maximum-active-time>120</maximum-active-time>
- <!-- 连接最大生命时间 默认4小时 单位:秒 -->
- <maximum-connection-lifetime>600</maximum-connection-lifetime>
- </proxool>
2,在项目中 web.xml 中添加所配置的数据源,在 web-app 下添加如下内容:
- <!-- 配置数据源 -->
- <servlet>
- <servlet-name>ServletConfigurator</servlet-name>
- <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
- <init-param>
- <param-name>xmlFile</param-name>
- <param-value>WEB-INF/proxool.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <!-- proxool提供的管理监控工具,可查看当前数据库连接情况。 -->
- <servlet>
- <servlet-name>Admin</servlet-name>
- <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Admin</servlet-name>
- <url-pattern>/admin</url-pattern>
- </servlet-mapping>
对于管理监视工具,如果不使用可以不进行配置。
3,测试:
- // 获取数据库连接
- public void getConnection() throws Exception {
- if (conn == null) {
- //proxool驱动类
- Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
- // 此处的DBPool是在proxool.xml中配置的连接池别名
- conn = DriverManager.getConnection("proxool.15DayWeb");
- }
- }
- // 数据库访问,执行查询操作
- public ResultSet query(String sql) throws Exception {
- // 初始化数据库连接
- getConnection();
- // 创建 Statement 对象
- Statement stmt = conn.createStatement();
- // 构造 sql 语句
- sql = "select * from about_team_table";
- return stmt.executeQuery(sql);
- }
- // 测试是否可以正常读取表 about_team_table 的数据
- public static void main(String[] args) throws Exception {
- DbDao dd = new DbDao();
- ResultSet rs = dd.query("");
- while (rs.next()) {
- System.out.println(rs.getInt("id"));
- System.out.println(rs.getString("name"));
- System.out.println(rs.getString(3));
- System.out.println(rs.getString(4));
- System.out.println(rs.getBinaryStream("photo"));
- }
- }