这是我的tomcatde DHCP的配置
<Resource driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" logAbandoned="true" maxActive="20" maxIdle="2" maxWait="5000" name="system" password="sa" removeAbandoned="true" removeAbandonedTimeout="60" type="javax.sql.DataSource"
url="jdbc:sqlserver://127.0.0.1:1433DatabaseName=base" username="sa"/>
当中的
logAbandoned="true" removeAbandoned="true" removeAbandonedTimeout="60"就是用来配置数据库断开后自动连接的。
msql数据库连接:一、传统方法:
1、本人使用JDBC驱动mysql-connector-java-5.1.6-bin.jar,将此驱动包放到%Tomcat_Home%\common\lib\下,
2、在应用程序中加载此包,右键项目属性->java build path->libraries->external libraries
3、在应用程序中加载驱动,Class.forName("com.mysql.jdbc.Driver").newInstance()
4、 用java.sql.DriverManager类取得一连conn=DriverManager.getConnection(url)
5、用java.sql.Statement接口创建stmt 对象,stmt=conn.createStatement()
或java.sql.PreraredStatement接口 pstmt
6、 用java.sql.ResultSet接口创建rst对象,rst = stmt.executeQuery(sql语句)
7、 处理结果集,断开数据库连接。
二、数据池连接技术
1、 将mysql-connector-java-5.1.6-bin.jar,也在%Tomcat_Home%\common\lib\下,
2、 在tomcat中manager中配置数据源名,配置完后内容自动放在conf\server.xml中。
3、 在conf\catalina\localhost\下建你应用程序的xml文件,例wei2.xml中,内容为<Context docBase="wei2" path="/wei2">
<ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource"/>
</Context>
其中jdbc/mysql为配置的JNDI
下面说下JNDI与DataSource
JNDI java naming directory interface命名和目录接口命名服务来使组件定位到其它组件和资源(数据库资源),JNDI所有名应该以字符串java:comp/env开始;
要定位JDBC资源中,这时就可以编写代码使用JNDI的lookup()方法来定位到这个资源了。
JNDI命名服务有一组将名称与对象联系在一起的绑定。JNDI中的lookup()方法传递一个JNDI参数(java:comp/env/myjdbc,前面java:comp/env是必要的。),返回相应的对象(返回类型为DataSource,若为数据库,则可用DataSource中的getConnection()方法获取数据库连接).
DataSoure 是javax.sql.DataSource类型。
数据库连接池分三步:
1、 指定数据库连接的逻辑名,起名java:comp/env/myjdbc
2、 获取与逻辑名相当的DataSource对象,代码为:
InitialContext ctx = new InitialContext()
DataSource ds = (DataSource)ctx.lookup(“java:comp/env/myjdbc”)
3、 由DataSource对象获取Connection对象
Connection con=ds.getConnection()
综上所有步骤:
Connection con
Private void init(){
Try{
InitialContext ctx = new InitialContext()
DataSource ds = (DataSource)ctx.lookup(“java:comp/env/jdbc/mysql”)
Conn = ds.getConnection()
}
Catch(Exception e){
e.printStackTrace()
}
}
这段代码使用连接池技术返回一个Connection对象.
session是否释放了 我以前采用连接池jndi的方法 出现过这种情况我是用spring管理的事务 后来查询了一下 改成了
Session s =this.getSession()
最后release(s)
就不会出现这样的情况 听说是spring的bug
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)