最近寫了一個WEB項目發現只是使用JDBC資料庫,總是會出現“預登入”錯誤,原因就是因為資料庫連接的數目是有限的,所以使用JNDI串連資料庫就會解決上述問題,通過JNDI會建立一個資料庫連接池,在DataSource中事先建立了多個資料庫連接,這些資料庫連接儲存在串連池(Connect Pool)中。Java程式訪問資料庫時,只需要從串連池中取出空閑狀態的資料庫連接;當程式訪問資料庫結束,再將資料庫連接放回串連池。
以下是如何進行配置:
1,在Tomcat中配置:
a.>tomcat 安裝目錄下的conf的context.xml 的
<Context></Context>中
<Resource name="jdbc/db_net" auth="Container" type="javax.sql.DataSource" maxActive="10"
maxIdel="10" maxWait="1000" username="lifan" password="sqllifan2005"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1434;Database=db_net">
</Resource>
其中
name 表示指定的jndi名稱
auth 表示認證方式,一般為Container
type 表示資料來源床型,使用標準的javax.sql.DataSource
maxActive 表示串連池當中最大的資料庫連接
maxIdle 表示最大的空閑串連數
maxWait 當池的資料庫連接已經被佔用的時候,最大等待時間
username 表示資料庫使用者名稱
password 表示資料庫使用者的密碼
driverClassName 表示JDBC DRIVER
url 表示資料庫URL地址
b.>將相應的jar包拷貝到Tomcat伺服器下的lib目錄中,jar包名稱如下
commons-dbcp.jar
commons-pool.jar
commons-collections-2.1.jar
c.>獲得Connection對象的代碼如下
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
private static Connection cn = null;
/*
* 得到Connection對象
*/
private void getConnection() {
try {
Context context = new InitialContext();
DataSource ds = (DataSource)context.lookup ("java:/comp/env/jdbc/db_net");//jdbc/db_net是上面name屬性的值
cn = ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
2.但是如果你的Tomcat下有多個apps,只想對特定的項目進行JNDI的配置所以你應該在webRoot下的META-INT目錄下建立context.xml檔案,在上面的content內容中再添加一條語句factory="org.apache.commons.dbcp.BasicDataSourceFactory"
同時將上面的jar包拷貝到webRoot下的WEB-INFO下的lib目錄中
擷取Connection對象的代碼保持不變