Eclipse+Tomcat7.0+MySQL 连接池设置
http://blog.sina.com.cn/s/blog_85d71fb70101ab99.html
工程名:JavaWeb
第一步:配置server.xml
在Tomcat的server.xml文件中</host>之前添加如下配置信息:
<Context path="/JavaWeb" docBase="JavaWeb" debug="5" reloadable="true" crossContext="true" source="org.eclipse.jst.jee.server:JavaWeb"><Resource name="jdbc/DBCP"auth="Container"type="javax.sql.DataSource"maxActive="100"maxIdle="30"maxWait="10000"username="root"password=""driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true"/> </Context><context>各屬性的含義如下:
(1)path:web應用的context路徑。catalina將每個URL的起始和context path進行比較,選擇合適的web應用處理該請求。特定Host下的context path必須是惟一的。如果context path為空字符串(""),這個context是所屬Host的缺省web應用,用來處理不能匹配任何context path的請求。
(2)docBase:該web應用的文檔基準目錄(Document Base,也稱為Context Root),或者是WAR文件的路徑。可以使用絕對路徑,也可以使用相對于context所屬的Host的appBase路徑。
(3)debug:與這個Engine關聯的Logger記錄的調試信息的詳細程度。數字越大,輸出越詳細。如果沒有指定,缺省為0。
(4)reloadable:如果希望Catalina監視/WEB-INF/classes/和/WEB-INF/lib下面的類是否發生變化,在發生變化的時候自動重載web application,設為true。這個特征在開發階段很有用,但也大大增加了服務器的開銷。因此,在發布以后,不推薦使用。但是,你可以使用 Manager應用在必要的時候觸發應用的重載。
(5)crossContext:如果想在應用內調用ServletContext.getContext()來返回在該虛擬主機上運行的其他web application的request dispatcher,設為true。在安全性很重要的環境中,設為false,使得getContext()總是返回null。缺省值為false。
(6)source:還沒弄清楚是什么作用。
<Resource>各屬性的含義如下:
(1)name:指定Resource的JNDI名字。
(2)auth:指定管理Resource的Manager,它有兩個可選值:Container和Application。Container表示由容器來創建和管理Resource,Application表示由web應用來創建和管理Resource。
(3)type:指定Resource的Java類名。
(4)maxActive: 池中連接的最大數目。要確保讓 MySQL 的最大連接數大于這個值。如果其值為 0,則沒有最大數量限制。
(5)maxIdle:池中最大空閑數據庫連接數。如果其值為-1,則沒有限制。(有的博客說值為0表示不受限制)
(6)maxWait:等待一個連接變成可用的最長時間,單位是 ms。這個例子中該值為 10 s,如果超時將拋出異常。如果設置為-1,將無限等待。
(7)username 和 password:連接 MySQL 數據庫的用戶名和口令。
(8)driverClassName:MySQL 數據庫的 JDBC 驅動程序的名字,這里的名字是'com.mysql.jdbc.Driver'。
(9)url:JDBC 連接 MySQL 數據庫的 url。其中'127.0.0.1'是要連接的數據庫服務器的ip,'3306'是數據庫服務器端口,'test'是數據庫名。參數 autoReconnect=true 確保連接池能夠重新連接。如果 8 個小時沒有操作,MySQL 管理器會關閉連接。
第二步:配置WEB-INF/lib/web.xml文件
??????? 如果web應用訪問了有Servlet容器管理的某個JNDI資源,那么必須在web.xml文件中聲明對這個JNDI資源的引用。表示資源引用的元素為<resource-ref>,以下是聲明引用jdbc/BookDB數據源的代碼:
<resource-ref><description>DB Connection</description>
<res-ref-name>jdbc/DBCP</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>屬性說明:
1)description:對所引用的資源的說明。
2)res-ref-name:指定所引用資源的JNDI名字,與<Resource>元素中的name屬性對應。
3)res-type:指定所引用資源的類名,與<Resource>元素中的type屬性對應。
4)res-auth:指定管理所引用資源的Manager,與<Resource>元素中的auth屬性對應。
第三步:Java調用
1 //連接池 2 try { 3 Context initContext = new InitialContext(); 4 Context envContext = (Context)initContext.lookup("java:/comp/env"); 5 DataSource ds = (DataSource)envContext.lookup("jdbc/DBCP"); 6 Connection connect = ds.getConnection(); 7 System.out.println("Success connect Mysql server (DBCP)!"); 8 res=true; 9 } catch (Exception e) { 10 System.out.print("error connect Mysql server(DBCP)!"); 11 e.printStackTrace(); 12 }其中第4行中lookup()的參數我是直接復制的,沒有修改,還不懂是什么意思。
第5行中lookup()的參數是前兩步中設置的JNDI名字。
在程序中遇到了錯誤:org.apache.tomcat.dbcp.dbcp.BasicDataSource cannot be cast to org.apache.tomcat.jdbc.pool.DataSource
經查是引入的包不對。本項目中正確的包是
1 import javax.naming.Context; 2 import javax.naming.InitialContext; 3 //import org.apache.tomcat.jdbc.pool.DataSource; 5 import javax.sql.DataSource;比較發現“javax.sql.DataSource”就是第一步中<Resource> 的type屬性,也是第二步中<resource-ref>的<res-type>值。
?
轉載于:https://www.cnblogs.com/anan1688/p/4497583.html
總結
以上是生活随笔為你收集整理的Eclipse+Tomcat7.0+MySQL 连接池设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 几个书本上不常见到的C语言函数
- 下一篇: 一个类怎样引用另外一个类的成员变量或方法