java web开发 数据库连接池什么时候初始化

java web开发 数据库连接池什么时候初始化,第1张

数据库连接池处言喻现部application server都提供自数据库连接池案要按照application server文档说明确配置即应用享受数据库连接池处 些候我应用独立java application并普通WEB/J二EE应用且单独运行要application server配合种情况我需要建立自数据库连接池案 一、 DBCP DBCPApache源项目: commons.dbcp DBCP依赖Apache另外二源项目 commons.collectionscommons.pool dbcp包目前版本一.二.一:中国jakarta.apache.org/commons/dbcp/ pool包目前版本一.三:中国jakarta.apache.org/commons/pool/ common-collections包:中国jakarta.apache.org/commons/collections/ 载些包并些包路径添加classpath使用dbcp做项目数据库连接池使用 建立我自数据库连接池使用xml文件传入需要参数使用hard code式简单介绍所需要我自写代码少要建立文件: import org.apache中国mons.dbcp.BasicDataSourceimport org.apache中国mons.dbcp.BasicDataSourceFactoryimport java.sql.SQLExceptionimport java.sql.Connectionimport java.util.Propertiespublic class ConnectionSource {private static BasicDataSource dataSource = null public ConnectionSource() { }public static void init() {if (dataSource != null) { try { dataSource.close()} catch (Exception e) { }dataSource = null}try { Properties p = new Properties()p.setProperty("driverClassName", "oracle.jdbc.driver.OracleDriver")p.setProperty("url", "jdbc:oracle:thin:@一9二.一陆吧.0.一:一5二一:testDB")p.setProperty("password", "scott")p.setProperty("username", "tiger")p.setProperty("maxActive", "三0")p.setProperty("maxIdle", "一0")p.setProperty("maxWait", "一000")p.setProperty("removeAbandoned", "false")p.setProperty("removeAbandonedTimeout", "一二0")p.setProperty("testOnBorrow", "true")p.setProperty("logAbandoned", "true") dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(p) } catch (Exception e) { }}public static synchronized Connection getConnection() throws SQLException {if (dataSource == null) { init()}Connection conn = null if (dataSource != null) { conn = dataSource.getConnection()}return conn} } 接我应用要简单使用ConnectionSource.getConnection()取连接池数据库连接享受数据库连接带给我处我使用完取数据库连接要简单使用connection.close()连接返连接池至于直接关闭连接返给连接池dbcp使用委派模型实现Connection接口 使用Properties创建BasicDataSource参数设置比较重要: testOnBorrow、testOnReturn、testWhileIdle意思取连接、返连接或连接空闲否进行效性验证(即否数据库连通)默认都false所数据库连接某种原断掉再连接池取连接实际能效连接所确保取连接效 些属性设true进行校验需要另参数:validationQueryoracle说:SELECT COUNT(*) FROM DUAL实际简单SQL语句验证SQL语句数据库跑已连接结返 二参数:timeBetweenEvictionRunsMillis minEvictableIdleTimeMillis 两配合持续更新连接池连接象timeBetweenEvictionRunsMillis 于0每timeBetweenEvictionRunsMillis 间启线程校验连接池闲置间超minEvictableIdleTimeMillis连接象 其些参数参考源代码 二、 C三P0: C三P0放源代码JDBC连接池C三PO 连接池优秀连接池推荐使用C三PO实现JDBC三.0规范部功能性能更加突,包括实现jdbc三jdbc二扩展规范说明Connection Statement 池DataSources 象 载址:中国sourceforge.net/projects/c三p0 package com.systex.utils.webimport java.beans.PropertyVetoExceptionimport java.sql.Connectionimport java.sql.SQLExceptionimport javax.sql.DataSourceimport com.mchange.v二.c三p0.ComboPooledDataSourcepublic class C三PODataSource { private static ComboPooledDataSource dataSource = null private static final String driver = "com.mysql.jdbc.Driver" private static final String url = "jdbc:mysql://localhost:三三0陆/wyd" private static final String userName = "root" private static final String password = "root"public static DataSource getDataSource() { if (dataSource == null) {dataSource = new ComboPooledDataSource() try { dataSource.setDriverClass(driver) } catch (PropertyVetoException e) { System.out.println("DataSource Load Driver Exception!!")e.printStackTrace() }dataSource.setJdbcUrl(url) dataSource.setUser(userName) dataSource.setPassword(password) // 设置连接池连接容量dataSource.setMaxPoolSize(二0) // 设置连接池连接容量dataSource.setMinPoolSize(二) // 设置连接池statements象容量dataSource.setMaxStatements(一00) } return dataSource } public static Connection getConnection() throws SQLException { return C三PODataSource.getDataSource().getConnection() } } 三、 Proxool Java SQL Driver驱程序提供选择其类型驱程序连接池封装非简单移植现存代码完全配置快速熟健壮透明现存JDBC驱程序增加连接池功能 官中国站: 中国proxool.sourceforge.net/ 载址:中国proxool.sourceforge.net/download.htm

1. jeecg数据库脚本问题

注意:jeecg3.5.2之前版本,不需要数据库脚本,程序会自动初始化数据库。从3.5.2+开始,需要手工执行SQL脚本,初始化数据库。

2. Tomcat内存溢出

2014-6-27 15:29:21 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler process

严重: Error reading request, ignored

java.lang.OutOfMemoryError: PermGen space

解决方案:

在tomcat\bin目录下找到bin \ catalina.bat文件,用编辑形式打开,找到以下的内容:加入下边红色的Tomcat内存设置语句就可以了:

rem ----- Execute The Requested Command

set JAVA_OPTS=-Xms512m -Xmx512m

echo Using CATALINA_BASE: %CATALINA_BASE%

echo Using CATALINA_HOME: %CATALINA_HOME%

echo Using CATALINA_TMPDIR: %CATALINA_TMPDIR%

echo Using JAVA_HOME: %JAVA_HOME%

linux下

bin/ catalina.sh

JAVA_OPTS="-Xms512m -Xmx2048m -XXermSize=512M -XX:MaxNewSize=256m -XX:MaxPermSize=1024m"

3. Eclipse内存溢出

2014-6-27 15:29:21 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler process

严重: Error reading request, ignored

java.lang.OutOfMemoryError: PermGen space

解决方案: 配置下maven启动jdk内存

java调用kettle数据库类型资源库中的ktr

此问题在1个月前或许已经接触,单是一直木有怎么用到,就被耽搁至今;问题的解决要来源于网络,其实我还想说问题的解决更多的是要靠我们自己的思想,不过多的言情,我们接下来直接进入主题吧!

环境:kettle-spoon 4.2.0,oracle11g,myeclipse6.5,sqlserver2008

前提:在kettle图形界面spoon里面已经做好了一个ktr转换模型,此时我的ktr信息如下图:

Step1:在myeclipse创建project,导入kettle集成所需要的包

Step2:重点解析与code源码

//定义ktr名字

private static String transName = "test1"

//初始化kettle环境

KettleEnvironment.init()

//创建资源库对象,此时的对象还是一个空对象

KettleDatabaseRepository repository = new KettleDatabaseRepository()

//创建资源库数据库对象,类似我们在spoon里面创建资源库

DatabaseMeta dataMeta =

new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password")

//资源库元对象,名称参数,id参数,描述等可以随便定义

KettleDatabaseRepositoryMeta kettleDatabaseMeta =

new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta)

//给资源库赋值

repository.init(kettleDatabaseMeta)

//连接资源库

repository.connect("admin","admin")

//根据变量查找到模型所在的目录对象

RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj")

//创建ktr元对象

TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null )

//创建ktr

Trans trans = new Trans(transformationMeta)

//执行ktr

trans.execute(null)

//等待执行完毕

trans.waitUntilFinished()

上面的两个步骤才可以确定是资源库中的那个路径下的ktr和我们用命令执行一样的-dir ,-tran -job

附上源码:

package kettle

import org.pentaho.di.core.KettleEnvironment

import org.pentaho.di.core.database.DatabaseMeta

import org.pentaho.di.core.exception.KettleException

import org.pentaho.di.repository.Repository

import org.pentaho.di.repository.RepositoryDirectoryInterface

import org.pentaho.di.repository.kdr.KettleDatabaseRepository

import org.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta

import org.pentaho.di.trans.Trans

import org.pentaho.di.trans.TransMeta

/**

* <p>Title: java调用kettle4.2数据库型资料库中的转换</p>

* <p>Description: </p>

* <p>Copyright: Copyright () 2012</p>

*/

public class ExecuteDataBaseRepTran {

private static String transName = "test1"

public static void main(String[] args) {

try {

//初始化kettle环境

KettleEnvironment.init()

//创建资源库对象,此时的对象还是一个空对象

KettleDatabaseRepository repository = new KettleDatabaseRepository()

//创建资源库数据库对象,类似我们在spoon里面创建资源库

DatabaseMeta dataMeta =

new DatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password")

//资源库元对象,名称参数,id参数,描述等可以随便定义

KettleDatabaseRepositoryMeta kettleDatabaseMeta =

new KettleDatabaseRepositoryMeta("enfo_bi", "enfo_bi", "king description",dataMeta)

//给资源库赋值

repository.init(kettleDatabaseMeta)

//连接资源库

repository.connect("admin","admin")

//根据变量查找到模型所在的目录对象,此步骤很重要。

RepositoryDirectoryInterface directory = repository.findDirectory("/enfo_worker/wxj")

//创建ktr元对象

TransMeta transformationMeta = ((Repository) repository).loadTransformation(transName, directory, null, true, null )

//创建ktr

Trans trans = new Trans(transformationMeta)

//执行ktr

trans.execute(null)

//等待执行完毕

trans.waitUntilFinished()

if(trans.getErrors()>0)

{

System.err.println("Transformation run Failure!")

}

else

{

System.out.println("Transformation run successfully!")

}

} catch (KettleException e) {

e.printStackTrace()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/sjk/6739057.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-27
下一篇2023-03-27

发表评论

登录后才能评论

评论列表(0条)

    保存