只使用jdbcTemplate, 連接池用proxool.
1.下載地址
proxool:
http://proxool.sourceforge.net/
2.導入的包
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
log4j-1.2.16.jar
mysql-connector-java-5.1.8-bin.jar
org.springframework.beans-3.1.1.RELEASE.jar
org.springframework.core-3.1.1.RELEASE.jar
org.springframework.jdbc-3.1.1.RELEASE.jar
org.springframework.transaction-3.1.1.RELEASE.jar
proxool-0.9.1.jar
proxool-cglib.jar
3.配置文件 /WEB-INF/proxool.xml
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>dbname</alias>
<driver-url>jdbc:mysql://118.186.210.242:447/wucaiju?user=root&password=root&useUnicode=true&characterEncoding=utf-8</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root" />
<property name="password" value="root" />
</driver-properties>
<maximum-connection-count>100</maximum-connection-count>
<minimum-connection-count>10</minimum-connection-count>
<house-keeping-sleep-time>30000</house-keeping-sleep-time>
<maximum-new-connections>10</maximum-new-connections>
<prototype-count>5</prototype-count>
</proxool>
</something-else-entirely>
4.web.xml
<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>
<servlet>
<servlet-name>datasource_dbname</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>datasource_dbname</servlet-name>
<url-pattern>/datasource_dbname</url-pattern>
</servlet-mapping>
<!-- 配置受保護域,只有Tomcat管理員才能察看連接池的信息 -->
<security-constraint>
<web-resource-collection>
<web-resource-name> proxool </web-resource-name>
<url-pattern>/datasource_dbname</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>proxool manager Application</realm-name>
</login-config>
<security-role>
<description>
The role that is required to log in to the Manager
Application
</description>
<role-name> manager </role-name>
</security-role>
5.測試類
public class TestDao {
public void test()throws Exception{
Context context = new InitialContext();
//DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/mysql");
//DataSource ds = (DataSource)context.lookup("proxool.dbname");
DataSource ds = new ProxoolDataSource("dbname") ; //此處是alias的名稱,而不是"proxool.別名"
JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
jdbcTemplate.afterPropertiesSet();
System.out.println(jdbcTemplate);
String sql = "select * from t_pic";
List list = jdbcTemplate.queryForList(sql);
for(int i=0; i<list.size(); i++){
Map map = (Map)list.get(i);
System.out.println(map.get("createTime"));
}
}
}
6.直接jdbc用proxool
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
public class PoolManager{
private static int activeCount = 0 ;
public PoolManager(){
}
/**
* 獲取連接
* getConnection
* @param name
* @return
*/
public Connection getConnection() {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver" ); //proxool驅動類
Connection conn = DriverManager.getConnection("proxool.dbname" ); // 注意,此處用的是proxool + 別名
//此處的datasource1是在proxool.xml中配置的連接池別名,當然根據需要可以用datasource2
showSnapshotInfo();
return conn;
}catch (Exception ex){
ex.printStackTrace();
}
return null ;
}
/**
* 此方法可以得到連接池的信息
* showSnapshotInfo
*/
private void showSnapshotInfo(){
try {
SnapshotIF snapshot = ProxoolFacade.getSnapshot("dbname" , true );
int curActiveCount=snapshot.getActiveConnectionCount(); //獲得活動連接數
int availableCount=snapshot.getAvailableConnectionCount(); //獲得可得到的連接數
int maxCount=snapshot.getMaximumConnectionCount() ; //獲得總連接數
if (curActiveCount!=activeCount) //當活動連接數變化時輸出的信息
{
System.out.println("活動連接數:" +curActiveCount+ "(active) 可得到的連接數:" +availableCount+ "(available) 總連接數:" +maxCount+ "(max)" );
activeCount=curActiveCount;
}
}catch (ProxoolException e){
e.printStackTrace();
}
}
/**
* 獲取連接
* getConnection
* @param name
* @return
*/
public Connection getConnection(String name){
return getConnection();
}
/**
* 釋放連接
* freeConnection
* @param conn
*/
public void freeConnection(Connection conn){
if (conn!= null ){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 釋放連接
* freeConnection
* @param name
* @param con
*/
public void freeConnection (String name,Connection con){
freeConnection(con);
}
public void getQuery() {
try {
Connection conn = getConnection();
if (conn != null ){
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select * from t_pic" );
int c = rs.getMetaData().getColumnCount();
while (rs.next()){
System.out.println();
for ( int i= 1 ;i<=c;i++){
System.out.print(rs.getObject(i));
}
}
rs.close();
}
freeConnection(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String args[]){
PoolManager pm = new PoolManager();
pm.getQuery();
}
}