为什么使用数据源
主要是方便管理
1 你肯定要链接数据库
2 那么你肯定要用户名和密码
3 正式的数据库和应用服务器应该是单独的人员管理,而不是开发人员
4 密码会定期修改
5 如果链接数据库是各自书写代码和配置,则运行环境的密码修改将会是一个噩梦,一不小心就忘记一个
6 所以,大家全部到一个数据源那里获取连接。管理员只需要修改数据源的配置,而无需修改应用的配置
7 如果数据库的地址变更,则同样不会影响到应用,也只是修改数据源
8 开发人员无需知道正式数据库的密码
-----------------------------------------------------
在配置项中,我们使用数据源来表示对应的数据库连接。使用数据源有两个好处:对开发人员屏蔽数据库细节,只要通过JNDI取得数据源就可以了,无需关心数据库连接是如何建立的;数据源通常都提供了数据库连接池的功能。
数据库连接是一种关键的有限的昂贵的资源,而且数据库连接的建立和关闭也是很耗费系统资源的。在传统的两层C/S架构中,一个客户端对应一个数据库连接,在用户活动期间就独占此连接;而在分布式系统中,数据库连接的建立与关闭是异常频繁的,因此数据库连接的对系统的性能影响更是明显。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
JDBC3.0规范中规定了如下的接口和类来实现数据库连接池:
javax.sql.ConnectionEvent:连接事件
javax.sql.ConnectionPoolDataSource:连接池数据源
javax.sql.PooledConnection:被池化的连接
javax.sql.ConnectionEventListener:连接事件监听接口
上边这些接口和类是对数据库连接池内部实现的规定,对于使用者来说是透明的。数据库连接池的使用者一般只和DataSource接口直接打交道,通过这个接口获得数据库连接,其主要方法为:
Connection getConnection():得到一个数据库连接
Connection getConnection(String userName,String password):得到一个数据库连接
java.io.PrintWriter getLogWriter():获得Log Writer的对象
void setLogWriter(java.io.PrintWriter out):设置Log Writer
void setLoginTimeout(int seconds):设置数据源尝试连接数据库的最大时间
int getLoginTimeout():获得数据源尝试连接数据库的最大时间
开源社区中有很多数据库连接池的实现,比如PoolMan等,使用这些数据库连接池包可以保证跨应用服务器的移植。不过在本案例系统中,我们使用应用服务器的数据源功能提供的数据库连接池。数据源在不同的服务器中有不同的配置方式,下面介绍Tomcat中数据源的配置。
打开%TOMCAT_HOME%\conf\server.xml,在</Context>和</host>前添加如下配置文件项:
<Context docBase="CowNewPIS" path="/CowNewPIS" reloadable="true">
<Resource type="javax.sql.DataSource"
auth="Container" name="jdbc/PISMSSQL_Dev" />
<ResourceParams name="jdbc/PISMSSQL_Dev">
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>url</name>
<value>
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=PISDev1106
</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>
com.microsoft.jdbc.sqlserver.SQLServerDriver
</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
</ResourceParams>
</Context>
在配置的时候,要指定数据库的JDBC驱动、数据库连接URL等。数据源配置完毕,重启服务器。编写一个测试客户端:
Context ctx=null;
Connection conn=null;
try
{
ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/PISMSSQL_Dev");
conn=ds.getConnection();
}
finally
{
if(conn!=null)
conn.close();
if(ctx!=null)
ctx.close();
}
Tomcat启动的时候会将Server.xml中的数据源配置绑定到JNDI中,我们可以在应用服务器启动的时候用代码来代替Tomcat完成绑定:
BasicDataSource bdds = new BasicDataSource();
//设置数据库驱动
bdds.setDriverClassName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//设置JDBC的URL
bdds.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=PISDev1106");
bdds.setUsername("sa");
//设置连接池初始大小
bdds.setInitialSize(2);
//JNDI配置
Map env = new Hashtable();
env.put("java.naming.factory.initial",
"org.apache.naming.java.javaURLContextFactory");
InitialContext ctx=new InitialContext(env);
//数据源绑定到JNDI
ctx.bind("jdbc/PISMSSQL_Dev",bdds);
这样我们可以把数据源的配置文件移到ServerConfig.xml中,增加类似如下的配置:
<DataSources>
<DataSource
name=”jdbc/PISMSSQL_Dev” driverClassName=”com.microsoft.jdbc.sqlserver.SQLServerDriver”
url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=PISDev1106”
userName=”sa”
>
</DataSource>
</DataSources>
在应用服务器启动的时候,到ServerConfig.xml中读取数据源配置完成绑定。这种方式一是减少了实施人员配置文件的工作量,服务端的任何配置都可以在这个配置文件中完成;二是使得系统在不同服务器之间移植变得更加容易。
分享到:
相关推荐
根据项目名自动生成 JNDI 配置文件,使程序员从手动配置JNDI数据源中解脱出来。 使用说明: 1、把“TomcatJNDI.war”文件放入 tomcat 的 webapps 文件夹下; 2、启动tomcat,在地址栏上输入:...
自定义jndi数据源factory类,用于解密jndi中的加密数据,解密方式为DES,具体可根据实际需求修改。
TOMCAT8 JNDI对用户名和密码加密
在这个场景中,“intellij idea使用tomcat开发时自动部署jndi数据源”是一个重要的知识点,它涉及到如何在IDE中配置和管理数据库连接,以便于在应用运行时动态地查找和使用数据源。 JNDI(Java Naming and ...
【标题】:“Tomcat配置JNDI数据源” 【描述】:“在Tomcat服务器上配置JNDI数据源,特别是通过DBCP连接池的方式” 【标签】:“tomcat,配置,JNDI数据源” 【内容】:配置JNDI数据源在Java Web应用程序中是一个...
Tomcat 配置 JNDI 数据源 Tomcat 是一个流行的 Java Web 服务器,JNDI(Java Naming and Directory Interface)是 Java 中的一种命名和目录接口规范。Tomcat 中的 JNDI 数据源是指将数据库连接信息注册到 JNDI ...
在Tomcat配置JNDI数据源的三种方式
Tomcat6+Spring+JNDI配置数据源说明 本文档主要介绍了Tomcat6+Spring+JNDI配置数据源的详细步骤和原理。数据源是一个池子,里面有若干个数据连接对象,当需要时就从里面拿一个使用,使用完毕就放回去,如果超过最大...
Tomcat配置JNDI数据源的N种方法
Spring Boot 2.x嵌入式tomcat JNDI数据源(开发配置文件)+ WAR 该代码旨在通过JNDI数据源查找保持数据库访问。 在开发中,使用配置了JNDI数据源的嵌入式tomcat运行在部署为WAR时,它将在服务器上查找真实的JDNI...
"JNDI 数据源配置(tomcat)" JNDI(Java Naming and Directory Interface)是一种Java API,用于访问命名和目录服务。JNDI 数据源配置是 Java Web 应用程序中常用的数据库连接方式。Tomcat 是一个流行的 Java Web ...
总结来说,这个Tomcat 6.0 JNDI数据源经典实例提供了从配置到使用的全过程,包括了必要的文件和脚本,便于开发者理解和实践JNDI数据源在实际项目中的应用。正确配置和使用JNDI数据源能有效管理和优化数据库连接,...
### Tomcat JNDI数据源配置详解 #### 一、引言 在现代Web应用开发中,数据库连接管理是一项至关重要的任务。为了提高应用程序的性能和可维护性,通常会采用连接池技术来管理和复用数据库连接。Apache Tomcat作为一...
总结,通过上述步骤,你已经在Tomcat中成功配置了一个JNDI数据源,使得应用程序可以通过全局名字方便地获取和释放数据库连接。这种配置方式提高了代码的可复用性和可维护性,同时利用连接池优化了数据库操作的性能。
### Java中使用Tomcat提供的JNDI数据源详解 #### 一、JNDI简介与重要性 Java Naming and Directory Interface(JNDI)是一种Java应用程序查找和访问各种命名及目录服务的API。它允许Java应用程序查找并使用远程...
首先,需要在 Tomcat 中添加 JNDI 数据源。可以通过 Tomcat 的 administration 组件来实现。在默认情况下,Tomcat 没有安装 administration 组件,需要单独安装。安装完成后,可以通过访问 ...
在Spring框架与Tomcat服务器的集成中,配置JNDI数据源是将数据库连接管理交给服务器来处理,提高应用的可移植性和资源利用率。下面将详细解释配置JNDI数据源的相关知识点。 一、JNDI数据源的概念 JNDI数据源是一种...
tomcat中配置jndi 数据源!!!
在Tomcat服务器中,JNDI的应用主要体现在其内置的JNDI实现——Tomcat JNDI,它允许开发者在应用中通过名称查找和使用资源,如数据源、环境变量等。本文将深入解析Tomcat 5.0中JNDI的工作原理,特别是`ContextBinding...