请参考
首先配置:META-INF/contextxml:
<xml version="10" encoding="UTF-8">
<Context path="" reloadable="true" crossContext="true">
<Resource name="jdbc/TestDB" auth="Container" type="javaxsqlDataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root"
driverClassName="commysqljdbcDriver" url="jdbc:mysql://127001:3306/db_name" />
</Context>
再配置:WEB-INF/webxml:在web-app元素下
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javaxsqlDataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
程序:
InitialContext ctx = new InitialContext();
Context envContext = (Context) ctxlookup("java:comp/env");
DataSource ds = (DataSource) envContextlookup("jdbc/TestDB");
Connection conn = dsgetConnection();
Statement stmt = conncreateStatement();
stmtexecute(“执行的SQL语句”);
stmtclose();
connclose();
1、 将mysql-connector-java-516-binjar,也在%Tomcat_Home%\common\lib\下, 2、 在tomcat中manager中配置数据源名,配置完后内容自动放在conf\serverxml中。 3、 在conf\catalina\localhost\下建你应用程序的xml文件,例wei2xml中,内容为 其
方法有两种
与服务器类型是无关的,主要是jar包的放入有关
第一种(C3P0的配置方法为例)
第一步:加载数据驱动包。(C3P0还要导入C3P0连接池使用的Jar:c3p0-090jar)
Tomcate 55 将数据库驱动包拷贝到tomcathome/common/lib目录下。
Tomcate 60 将数据库驱动包拷贝到tomcathome/lib目录下。
地二步:配置tomcat中servicexml:
<!--在tomcat中配置连接池属性说明
docBase web工程的文件路径
path web工程url的根目录
reloadable 当tomcat重启时候,是否重新加载配置文件
name 数据源的JNDI名
type 资源的类型,此处是数据源
driverClass数据库驱动类,根据不同的数据库 驱动类不同(我用的是MS SQL SERVICE2005)
jdbcUrl 连接字符串
factory 连接工厂类-->
<Context docBase="DataSrc61" path="/DataSrc61" reloadable="true">
<Resource name="jdbc/ds" auth="Container" type="commchangev2c3p0ComboPooledDataSource"
maxPoolSize="200" minPoolSize="1" initialPoolSize="100" acquireIncrement="2"
idleConnectionTestPeriod="60" maxIdleTime="60"
driverClass="commicrosoftsqlserverjdbcSQLServerDriver"
user="sa" password=""
jdbcUrl="jdbc:sqlserver://localhost:1433;DatabaseName=pubs"
factory="orgapachenamingfactoryBeanFactory"/>
</Context>
第三步:配置工程中的webxml文件
<!– 声名工程所需资源-->
<resource-ref>
<!– JDNI资源名 -->
<res-ref-name>jdbc/ds</res-ref-name>
<!– 资源类型 -->
<res-type>commchangev2c3p0ComboPooledDataSource</res-type>
<!– 资源范围 -->
<res-auth>Container</res-auth>
</resource-ref>
第四步:写连接类
import javaxnamingContext;
import javaxnamingInitialContext;
import javaxsqlDataSource;
import javasqlConnection;
public class JndiDao {
public static Connection getConnectionPool3()throws Exception
{
Connection con=null;
Context conx=new InitialContext();
DataSource ds=(DataSource)conxlookup("java:comp/env/jdbc/ds");
con=dsgetConnection();
return con;
}
}
第二种:(DBCP为例)
第一步:
导入DBCP连接池用到的Jar:naming-factory-dbcpjar(JVM使用)
(commons-dbcp-122jar为tomcat中默认有的DBCP连接池的包,而C3P0的话就要在tomcat中导入C3P0连接池使用的Jar:c3p0-090jar)
和数据库驱动包
第二步:
import orgapachetomcatdbcpdbcpBasicDataSource;//数据源
import orgapachetomcatdbcpdbcpConnectionFactory;
import orgapachetomcatdbcpdbcpDataSourceConnectionFactory;
import javasqlConnection;
public class DbcpDao {
static BasicDataSource bds=null;
static ConnectionFactory cf=null;
static
{
bds=new BasicDataSource();
bdssetDriverClassName("commicrosoftsqlserverjdbcSQLServerDriver");
bdssetUrl("jdbc:sqlserver://127001:1433;DatabaseName=pubs");
bdssetUsername("sa");
bdssetPassword("123");
//对连接池进行设置
bdssetMaxActive(300);
bdssetInitialSize(100);
bdssetMaxWait(10000);
bdssetMaxIdle(50);
}
public static Connection getConnectionPool()throws Exception
{
Connection con=null;
//创建出一个位于jvm中的DBCP连接池
cf=new DataSourceConnectionFactory(bds);
//从创建好的连接池中取得连接
con=cfcreateConnection();
return con;
}
public static void main(String[] args) {
try {
long time1=SystemcurrentTimeMillis();
//测试获得200个连接所用的时间
Connection[] cons=new Connection[200];
for(int i=0;i<conslength;i++)
{
cons[i]=DbcpDaogetConnectionPool();
}
long time2=SystemcurrentTimeMillis();
Systemoutprintln(time2-time1);
} catch (Exception e) {
// TODO: handle exception
eprintStackTrace();
}
}
}
连接先建立一些连接,并且这些连接允许共享,因此这样就节省了每次连接的时间开销。Mysql数据库为例,连接池在Tomcat中的配置与使用。
1、创建数据库Student,表student
2、配置serverxml文件。Tomcat安装目录下conf中serverxml文件。
<GlobalNamingResources>
<Resource
name="jdbc/DBPool"
type="javaxsqlDataSource"
password=""
driverClassName="commysqljdbcDriver"
maxIdle="2"
maxWait="5000"
username="root"
url="jdbc:mysql://localhost:3306/student"
maxActive="3"
/>
</GlobalNamingResources>
name:指定连接池的名称
type:指定连接池的类,他负责连接池的事务处理
url:指定要连接的数据库
driverClassName:指定连接数据库使用的驱动程序
username:数据库用户名
password:数据库密码
maxWait:指定最大建立连接等待时间,如果超过此时间将接到异常
maxIdle:指定连接池中连接的最大空闲数
maxActive:指定连接池最大连接数
3、配置webxml文件。
<web-app>
<resource-ref>
<description>mysql数据库连接池配置</description>
<res-ref-name>jdbc/DBPool</res-ref-name>
<res-type>javaxsqlDataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
</web-app>
4、配置contextxml文件
与serverxml文件所在的位置相同。
<Context>
<ResourceLink
name="jdbc/DBPool"
type="javaxsqlDataSource"
global="jdbc/DBPool"
/>
</Context>
5、测试
DataSource pool = null;
Context env = null;
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
env = (Context)new InitialContext()lookup("java:comp/env");
//检索指定的对象,返回此上下文的一个新实例
pool = (DataSource)envlookup("jdbc/DBPool");
//获得数据库连接池
if(pool==null){outprintl("找不到指定的连接池!");}
con = poolgetConnection();
st = concreateStatement();
rs = stexecuteQuery("select from student");
}catch(Exception ex){outprintl(netoString());}
用tomcat的数据库连接池,修改tomcat配置文件serverxml,在context标签中加上
<Context path="" docBase="ROOT" debug="0">
<Resource name="jdbc/OracleDB" auth="Container" type="javaxsqlDataSource"/>
<ResourceParams name="jdbc/OracleDB">
<parameter>
<name>factory</name>
<value>orgapachecommonsdbcpBasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oraclejdbcdriverOracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@101161:1521:dbname</value>
</parameter>
<parameter>
<name>username</name>
<value>yourname</value>
</parameter>
<parameter>
<name>password</name>
<value>yourpasswd</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>1000</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>20</value> </parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
maxActive 是最大激活连接数,这里取值为1000,表示同时最多有1000个数据库连接。maxIdle是最大的空闲连接数,这里取值为20,表示即使没有数据库连 接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态。MaxWait是最大等待秒钟数,这里取值-1,表示无限等待,直到超时为止,也可取值 9000,表示9秒后超时。
问题解决思路:
将配置文件用户相关的信息(例如:密码)进行加密使其以密文形式存在,进行初始化连接池的时候进行解密 *** 作,达到成功创建连接池的目的。Tomcat默认使用DBCP连接池(基于common-pool的一种连接池实现),对orgapachecommonsdbcpBasicDataSourceFactory类修改,把数据库密码字段(加密后的密文)用解密程序解密,获得解密后的明文即可。
具体实现:
1 修改orgapachecommonsdbcpBasicDataSourceFactory类文件
找到数据源密码设置部分
value = propertiesgetProperty(PROP_PASSWORD);
if (value != null) {
dataSourcesetPassword(value);
}
修改为:
value = propertiesgetProperty(PROP_PASSWORD);
if (value != null) {
dataSourcesetPassword(Encodedecode(value));
}
将配置文件中的“密码”(加密后的结果)取出,调用加解密类中的解密方法Encodedecode(value)进行解密。
2 加密类Encodejava,本例中使用加密解密模块比较简单只是用来说明问题,密文为明文的十六进制串。
public class Encode {
//编码-普通字符串转为十六进制字符串
public static String encode(String password){
String result = “”;
byte[] psd = passwordgetBytes();
for(int i=0;i<psdlength;i++){
result += IntegertoHexString(psd[i]&0xff);
}
return result;
}
//解码–十六进制字符串转为普通字符串
public static String decode(String password){
String result = “”;
password = passwordtoUpperCase();
int length = passwordlength() / 2;
char[] hexChars = passwordtoCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
result = new String(d);
return result;
}
//字符转字节
public static byte charToByte(char c) {
return (byte) “0123456789ABCDEF”indexOf(c);
}
}
3 数据库连接池文件,红色字体为数据源配置中密码设置,此时已经改为密文形式。
<xml version=’10′ encoding=’utf-8′>
<Context docBase=”reportmis” path=”/reportmis” privileged=”true” workDir=”work\Catalina\localhost\reportmis”>
<Resource auth=”Container” name=”mis2datasource” type=”javaxsqlDataSource”/>
<ResourceParams name=”mis2datasource”>
<parameter>
<name>password</name>
<value>696e65743231</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@127001:1521:orcl</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oraclejdbcdriverOracleDriver</value>
</parameter>
<parameter>
<name>username</name>
<value>wanfang</value>
</parameter>
</ResourceParams>
</Context>
4 将修改后的BasicDataSourceFactoryjava和新添加的Encodejava编译后的class类文件重新打包进commons-dbcp-14jar,将该包拷贝进tomcat下的common/lib目录中,重启tomcat。此时tomcat下部署的应用在连接数据源的时候都可以在不暴露密码明文的情况下进行连接。
以上就是关于配置Tomcat7 Sqlserver连接池。全部的内容,包括:配置Tomcat7 Sqlserver连接池。、tomcat的数据库配置文件在哪、tomcat怎么配置JNDI连接等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)