数据源:通过jdbc连接数据库,多建立几条连接放在数据源里面。可以设置数据源的最大连接数,同时活跃的连接数,最少空闲的连接数,能够同时接收处理的连接数等等。

dbcp数据源

需要的jar包:

  1. commons-dbcp.jar;
  2. commons-pool.jar
  3. mysql-connector-java.jar

前两个jar包到阿帕奇官网下载。第三个jar包到mysql官网下载。

他是对jdbc的封装。底层还是要通过jdbc连接数据库的。实现了java.sql.DataSource接口的类有BasicDataSourceFactory和BasicDataSource。

这两个类是启动database的。

其中BasicDataSourceFactory底层实际上是先创建了BasicDataSource的对象,然后给BasicDataSource对象

进行分钟相关属性的赋值。比如username,password,url,driverClassName等等。BasicDataSource则是直接通过set方法对这些属性直接赋值。

通过getConnection方法获取数据库连接(Connection接口)。之后的操作就和jdbc一样了。

C3P0数据源

需要的jar包

c3p0-0.9.5.2.jar

mchange-commons-java-0.2.11.jar

mysql-connector-java-5.1.40-bin.jar

这些资源网上很多一找一大片。

这个类(ComboPooledDataSource)是启动datadase数据源的

(一)ComboPooledDataSource source = new ComboPooledDataSource();

     source.setDriverClass("com.mysql.jdbc.Driver");
        source.setUser("root");
        source.setPassword("1213265442");
        source.setJdbcUrl("jdbc:mysql://localhost:3306/user");通过set方法即可设置数据池的相关参数(最大连接数,同时活跃的连接数,最少空闲的连接数,能够同时接收处理的连接数等等)

(二)ComboPooledDataSource source = new ComboPooledDataSource("intergalactoApp");

编写c3p0-config.xml文件放在src目录下面。内容如下(注意加黑的部分)

<c3p0-config>
  <!-- This app is massive! -->
  <named-config name="intergalactoApp">
    <property name="acquireIncrement">50</property>       <!--连接池在无空闲连接可用时一次性创建的新数据库连接数 -->
    <property name="initialPoolSize">100</property>           <!--连接池初始化时创建的连接数-->
    <property name="minPoolSize">50</property>               <!--连接池最少保持的可用连接数->
    <property name="maxPoolSize">1000</property>           <!--连接池最多保持的可用连接数->

<property name="user">root</property>
      <property name="password">1213265442</property>
      <property name="driverClassName">com.mysql.jdbc.Driver</property>
      <property name="jdbcUrl">jdbc:mysql://localhost:3306/user</property>
  </named-config>
</c3p0-config>通过source.getConnection()的方法就可以得到Connection接口对象。剩下的就是jdbc的操作了。

通过hibernate和datasource连接

我使用的是hibernate4.3当前稳定的最高版本。查看project/etc/hibernate.proterties文件,这个文件是hibernate所有的的配置了。

查看可知

hibernate支持C3P0ConnectionProvider,ProxoolConnectionProvider,DatasourceConnectionProvider,DriverManagerConnectionProvider这四种jdbc连接池

并不包括dbcp,但是支持c3p0。下面我们来给hibernate配置C3P0.

需要的jar包

c3p0-0.9.2.2.jar

mchange-commons-java-0.2.11.jar

mysql-connector-java-5.1.40-bin.jar

hibernate-c3p0-4.3.5.Final

还有一些hibernate的必须包,在required文件夹下面。

hibernate.cfg.xml配置文件中加入

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>    
这就代表了不使用hibernate自己的连接池,而是使用我们自己的C3P0连接池

使用hibernate和c3p0做数据库的数据源前面都要加上“hibernate.c3p0”

<property name="hibernate.c3p0.idle_test_period">3000</property>

有关于jdcb的连接还是按照hibernate的jdbc连接。而有关c3p0数据源的属性配置比如启动多少个connection连接,属性前面都要加上“hibernate.c3p0”就像这样

其他的就跟正常的hibernate配置一样了。其实我们就是把hibernate自带的数据池换成了我们自己的。其他都一样。

JAVA高级编程(数据源datasource)的更多相关文章

  1. JAVA高级编程数据源datasource

    原文链接 数据源 通过jdbc连接数据库,多建立几条连接放在数据源里面.可以设置数据源的最大连接数,同时活跃的连接数,最少空闲的连接数,能够同时接收处理的连接数等等. dbcp数据源 需要的jar包: ...

  2. java高级编程笔记(四)

    java的Object类: 1.Object 类位于 java.lang 包中,编译时会自动导入:Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法. 2.Object ...

  3. java高级编程-使用反射强制给private字段赋值

    转自:http://blog.csdn.net/yaerfeng/article/details/7103397 今天项目中遇到了一个问题,要调用一个类,并获取这个类的属性进行赋值然后将这个类传递到方 ...

  4. 【java高级编程】JDK和CGLIB动态代理区别

    转载:https://blog.csdn.net/yhl_jxy/article/details/80635012 前言 JDK动态代理实现原理(jdk8):https://blog.csdn.net ...

  5. 【java高级编程】jdk自带事件模型编程接口

    事件类 java.util.EventObject java.beans.PropertyChangeEvent 事件监听接口 java.util.EventListener java.beans.P ...

  6. java高级编程技巧

    1. boolean a= b==null;这句话很亮. public class Test { public static void main(String[] args) { String b=& ...

  7. Java学习进阶—高级编程

    当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...

  8. 对java高级程序员有益的十本书

    英文原文:http://www.programcreek.com/2013/08/top-books-for-advanced-level-java-developers/ java语言是当今最受欢迎 ...

  9. 2018.6.19 Java核心API与高级编程实践复习总结

    Java 核心编程API与高级编程实践 第一章 异常 1.1 异常概述 在程序运行中,经常会出现一些意外情况,这些意外会导致程序出错或者崩溃而影响程序的正常执行,在java语言中,将这些程序意外称为异 ...

随机推荐

  1. Java面向对象编程 -6.2

    数组的引用传递 通过数组的基本定义可以发现,在数组使用的过程中依然需要使用new进行内存空间的开辟,同理,那么也一定存在有内存的关系匹配问题. 但是数组本身毕竟属于引用数据类型,那么既然是引用数据类型 ...

  2. Vue-设置默认路由选中

    需求分析: 一个导航组件,需要其中一个是选中状态,并且样式呈现高亮,选中的导航对应的页面也需要展示出来. 功能实现: router-link内置有一个选中状态,当处于当前路由时,会给 router-l ...

  3. About Computer Graphics 2.0

    Notes of Computer Graphics 2.0: towards end-user-generated contents CG 1.0 Modeling: construct 3D mo ...

  4. Python分析盘点2019全球流行音乐:是哪些歌曲榜单占领了我们?

    写在前面:圣诞刚过,弥留者节日气息的大家是否还在继续学习呐~在匆忙之际也不忘给自己找几首好听的歌曲放松一下,缠绕着音乐一起来看看关于2019年流行音乐趋势是如何用Python分析的吧! 昨天下午没事儿 ...

  5. 【代码审计】VAuditDemo 前台搜索注入

    在search.php中 $_GET['search']未经过任何过滤传入到$query的执行语句中

  6. 【代码总结】PHP面向对象之抽象类

    一.什么是抽象方法? 一个方法如果没有方法体(不使用"{}",直接使用分号结束的方法,才是没有方法体的方法),则这个方法就是抽象方法 1.声明一个方法,不使用{},而直接分号结束 ...

  7. cf 76 div2

    传送门 题意 t组样例 n个学生, x最多交换次数 a交换的第一个位置 b交换的第二个位置 最多是交换n-1次,不懂的话可以找个数列自己模拟一下: 然后其他的就是abs(a-b)+x;两个位置之间的距 ...

  8. 从零搭建vue+express开发环境

    1.express,vue运行环境,2建express项目,3建vue项目,4将vue项目(3)输出文件拷贝到express静态根目录里 一:---------PC全局安装express 和 vue- ...

  9. Update(Stage4):spark_rdd算子:第2节 RDD_action算子_分区_缓存:缓存、Checkpoint

    4. 缓存 概要 缓存的意义 缓存相关的 API 缓存级别以及最佳实践 4.1. 缓存的意义 使用缓存的原因 - 多次使用 RDD 需求: 在日志文件中找到访问次数最少的 IP 和访问次数最多的 IP ...

  10. request库解析中文

    官网地址: http://cn.python-requests.org/zh_CN/latest/ 高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某 ...