Java中的数据源就是javax.sql.DataSource。DataSource的创建可以有不同的实现。 -JNDI方式创建DataSource -Apache提供的简单连接池创建数据源 -C3P0方式创建数据源 -Proxool方式创建数据源 -BoneCP方式创建数据源 ### 几种常用的Java数据源解决方案 在Java开发过程中,数据源(DataSource)扮演着非常重要的角色,它负责管理数据库连接资源,为应用程序提供高效、可靠的数据库访问支持。`javax.sql.DataSource`接口定义了标准的数据源接口规范,不同的实现方式能够满足不同场景下的需求。本文将详细介绍几种常用的数据源解决方案及其配置方法,包括JNDI方式创建`DataSource`、Apache提供的简单连接池创建数据源、C3P0方式创建数据源、Proxool方式创建数据源以及BoneCP方式创建数据源。 #### JNDI 方式创建 DataSource JNDI(Java Naming and Directory Interface)是一种用于查找和定位远程对象的标准服务。通过JNDI,可以在容器中注册数据源,并且在应用程序中通过名称查找并使用这些数据源。这种方式适用于企业级应用服务器环境,例如Tomcat等。 **配置示例:** ```xml <!-- 在 Tomcat 的 conf/context.xml 文件中配置 --> <Context> <!-- 配置 MySQL 数据源 --> <Resource name="jdbc/NutzDemo" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/cheng"/> </Context> ``` **获取 DataSource 示例代码:** ```java // 获取 JNDI 中的数据源 Context initContext = new InitialContext(); Context context = (Context)initContext.lookup("java:comp/env"); DataSource dataSource = (DataSource)context.lookup("jdbc/NutzDemo"); ``` #### Apache 提供的简单连接池创建数据源 Apache Commons DBCP 是一个开源的数据库连接池组件,提供了基于`javax.sql.DataSource`接口的实现,可以方便地与各种数据库进行集成。 **依赖库:** - `commons-dbcp.jar` - `commons-pool.jar` **创建 DataSource 示例代码:** ```java // 创建 BasicDataSource 实例 BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost:3306/cheng"); ds.setUsername("root"); ds.setPassword("root"); ds.setInitialSize(50); ds.setMaxActive(100); ds.setMaxIdle(30); ds.setMaxWait(10000); // 关闭数据源 ds.close(); ``` #### C3P0 方式创建数据源 C3P0 是一个开源的连接池实现,提供了对`javax.sql.DataSource`接口的支持。相比其他连接池,C3P0 更加强调性能和稳定性。 **依赖库:** - `c3p0-0.9.1.2.jar` **创建 DataSource 示例代码:** ```java // 创建 ComboPooledDataSource 实例 ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/cheng"); ds.setUser("root"); ds.setPassword("root"); ds.setInitialPoolSize(50); ds.setMaxPoolSize(100); ds.setMaxIdleTime(10000); ``` #### Proxool 方式创建数据源 Proxool 是一个轻量级的连接池组件,具有易于配置和使用的特点。 **依赖库:** - `proxool-01.9.0RC3.jar` **创建 DataSource 示例代码:** ```java // 创建 ProxoolDataSource 实例 ProxoolDataSource ds = new ProxoolDataSource(); ds.setDriver("com.mysql.jdbc.Driver"); ds.setDriverUrl("jdbc:mysql://localhost:3306/cheng"); ds.setUser("root"); ds.setPassword("root"); ``` #### BoneCP 方式创建数据源 BoneCP 是一款高性能的连接池组件,特别适合于高并发场景下的数据库访问。 **依赖库:** - `bonecp-0.6.5.jar` - `google-collections-1.0.jar` - `slf4j-api-1.5.11.jar` - `slf4j-log4j12-1.5.11.jar` - `log4j-1.2.15.jar` **创建 DataSource 示例代码:** ```java // 创建 BoneCPDataSource 实例 BoneCPDataSource ds = new BoneCPDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/cheng"); ds.setUser("root"); ds.setPassword("root"); ``` ### 总结 以上介绍了几种常见的Java数据源解决方案,每种方案都有其特点和适用场景。JNDI 方式适用于企业级应用服务器环境;Apache Commons DBCP 和 C3P0 是成熟稳定的连接池组件,广泛应用于各种Java项目中;Proxool 是轻量级的选择;而BoneCP 则特别适合高并发场景。开发者可以根据项目的具体需求选择合适的数据源解决方案。
JNDI方式创建DataSource
以JNDI方式创建数据源首先要配置数据源的相关连接信息,也就是数据源连接池。该配置应该在Tomcat安装目录下的conf/context.xml文件中配置。其配置如下:
<Context>
……
<!-- MySql -->
<Resource name="jdbc/NutzDemo" auth="Container"
type="javax.sql.DataSource"maxActive="100" maxIdle="30"
maxWait="10000"username="root" password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/cheng"/>
……
</Context>
然后,在程序中以JNDI的方式创建数据源,得到数据库连接已进行相应的操作。代码如下:
// 初始化JNDI上下文,创建DataSource对象
Context context = (Context)initContext.lookup("java:comp/env");
DataSourcedataSource = (DataSource)context.lookup("jdbc/NutzDemo");
Apache提供的简单连接池创建数据源
以这种方式创建数据源必须先准备两个jar文件:commons-dbcp.jar 和 commons-pool.jar。
以这种方式创建的数据源就不再是javax.sql.DataSource。DataSource了,而是org.apache.commons.dbcp.BasicDataSource。而且不再需要配置任何文件就可以直接使用。代码如下:
// 创建BasicDataSource对象
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/cheng");
ds.setUsername("root");
ds.setPassword("root");
ds.setInitialSize(50);
剩余5页未读,继续阅读
- Glan902013-11-11讲的不错,值得借鉴
- gongmingwind2013-12-30介绍很详细
- 迷失的浮云2016-02-01说的还可以。实用价值不大
- sb_xiaobao2013-09-29介绍很详细
- 粉丝: 0
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助