spring项目中总要跟数据库打交道,其中怎么连接数据库的方法都有很多,大概分为3类:

1) 通过JNDI获取应用服务器(如JBOSS, Tomcat) 的数据源

2)  Spring容器中直接配置数据源

3)代码直接创建数据源,这个一般用于单元测试

然后每种都来记一记:

一:  JNDI获取应用服务器的数据源

首先应用服务器里要定义好数据源,例如JBoss:

jboss/v6.3.0.8.0/standalone/configuration/standalone.xml

这里的JNDI-name="java:/jdbc/OracleDS"

                 <datasource jndi-name="java:/jdbc/OracleDS" pool-name="OracleDS" enabled="true">
<connection-url>jdbc:oracle:thin:@test:1521:bb</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver>oracle</driver>
<pool>
<min-pool-size>20</min-pool-size>
</pool>
<security>
<security-domain>UA_AUTHENTICATION_INFO</security-domain>
</security>
<validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>
</datasource>

然后到spring项目中,有2中方式获取应用服务器的数据源:

第一种是:JndiObjectFactoryBean,如:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/jdbc/OracleDS"/>
</bean>

第二种是jee命名空间jndi-lookup,如

<beans xmlns=http://www.springframework.org/schema/beans
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xmlns:jee=http://www.springframework.org/schema/jee
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
<jee:jndi-lookup id="dataSource" jndi-name=" java:/jdbc/OracleDS"/>
</beans>

上面2中,都用到了jndi-name="java:/jdbc/OracleDS",就是上面应用服务器的数据源定义。

二:  spring容器中配置数据源

利用第三方依赖包,一个是apache的DBCP,一个是C3P0。

DBCP:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3309/sampledb" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>

C3P0:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/>
<property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/>
<property name="user" value="admin"/>
<property name="password" value=""/>
</bean>

到底谁好,后续再学再记。

三:代码自己实现连接

1) 通过DriverManager, 位于JDK中java/sql/包下,是JDBC1.0,需要硬性编码驱动,不支持连接池,代码如:

     //此处的Class.forName删掉,intellij 也能跑成功,所以这句要不要后续待查
Class.forName("com.mysql.jdbc.Driver");
try {
Connection connection = DriverManager.getConnection(DB_URL, USER, PASS); Statement statement = connection.createStatement(); } catch (SQLException e) {
e.printStackTrace();
}

2) 通过各种DataSource实现类

DataSource是一个接口,有很多实现DataSource接口,如上面的DBCP的BasicDataSource,C3P0中的ComboPooledDataSource,都是实现了这个接口,还有spring 自带了 DriverManagerDataSource ,还有Oracle的OracleDataSource.

所以这些实现类都可以直接在类中使用来创建连接

DBCP:

  BasicDataSource ods = new BasicDataSource();
ods.setUrl("jdbc:oracle:thin:@test:1521:ua");
ods.setUsername("test");
ods.setPassword("test");
Connection conn = ods.getConnection();

C3P0:

 ComboPooledDataSource ods = new ComboPooledDataSource();
ods.setJdbcUrl("jdbc:oracle:thin:@test:1521:ua");
ods.setUser("test");
ods.setPassword("test");
Connection conn = ods.getConnection();

Spring 的DriverManagerDataSource

DriverManagerDataSource ods = new DriverManagerDataSource ();
ods.setUrl("jdbc:oracle:thin:@test:1521:ua");
ods.setUsername("test");
ods.setPassword("test");
Connection conn = ods.getConnection();

当然也可以直接用具体数据库驱动里的,比如Oracle和MySql

Oracle的 OracleDataSource

OracleDataSource ods = new OracleDataSource();
ods.setUrl("jdbc:oracle:thin://localhost:3309/sampledb");
ods.setUsername("root");
ods.setPassword("1234");
Connection actualCon = ods.getConnection();

MySql:

OracleDataSource ods = new MysqlDataSource();
ods.setUrl("jdbc:mysql://localhost:3309/sampledb");
ods.setUsername("root");
ods.setPassword("1234");
Connection actualCon = ods.getConnection();

上面的BasicDataSource是可以解决不同数据库不同操作dataSource, 具体可以参考:

https://www.journaldev.com/2509/java-datasource-jdbc-datasource-example


												

20200107——记spring的DataSource的更多相关文章

  1. Spring的DataSource配置、将Hibernate配置所有写到Spring配置

    DataSource能够集中管理数据库连接,降低维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有非常多其它的如c3p0,jdbc,j ...

  2. spring配置datasource三种方式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp34 spring配置datasource三种方式 1.使用org.spri ...

  3. Spring的DataSource配置、将Hibernate配置全部写到Spring配置

    DataSource可以集中管理数据库连接,减少维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有很多其他的如c3p0,jdbc,jn ...

  4. Spring框架DataSource

    一 DataSource 简易介绍 JDK里 javax.sql的一个接口 public interface DataSource 表示无力数据源的连接,作为DriverManager设施的替代项, ...

  5. Spring:DataSource注入到dao

    Spring:DataSource注入到dao 使用DOS命令创建数据库(Mysql) CREATE DATABASE book DEFAULT CHARACTER SET utf8; CREATE ...

  6. Tomcat 6.0.32 +Spring dbcp datasource关闭Tomcat出现严重异常

    异常如下: 信息: Pausing Coyote HTTP/ -- :: org.apache.catalina.core.StandardService stop 信息: Stopping serv ...

  7. Spring配置DataSource数据源

    在Spring框架中有例如以下3种获得DataSource对象的方法: 1.从JNDI获得DataSource. 2.从第三方的连接池获得DataSource. 3.使用DriverManagerDa ...

  8. Spring的datasource配置详解

    一句话,Spring对Hibernate的整合,是在applicationContext.xml中配置sessionFactory来实现的,其中sessionFactory中要装配dataSource ...

  9. spring实例化dataSource使用jndi和jdbc两种方式

    一.使用jndi的方式 这种方式方便测试人员不需要改代码,直接改变tomcat的server.xml就可以更改数据库连接 spring创建bean <bean id="dataSour ...

随机推荐

  1. pyplot 作图总结

    折线图 下面是绘制折线图,设置图片的横轴纵轴标签,图片标题的API的用法. import matplotlib.pyplot as pyplot # init pyplot.figure() # ar ...

  2. OpenCV-Python ORB(面向快速和旋转的BRIEF) | 四十三

    目标 在本章中,我们将了解ORB的基础知识 理论 作为OpenCV的狂热者,关于ORB的最重要的事情是它来自" OpenCV Labs".该算法由Ethan Rublee,Vinc ...

  3. 《闲扯Redis三》Redis五种数据类型之List型

    一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...

  4. 同源策略与JSONP劫持原理

    同源策略 浏览器中有两个安全机制,一个浏览器沙盒(Sandbox),另一个就是同源策略(Same Origin Policy,简称SOP) ,下面介绍同源策略.同源是指同协议.同域名.同端口,必须三同 ...

  5. AI体验类产品竞品分析

    1.业界状态 人工智能(Artificial Intelligence),简称AI.上个世纪50年代就有一批年轻的科学家提出了这一概念,经历过50多年的长足发展,信息化建设的脚步不断加快,机器人战胜人 ...

  6. File.Create(path)未关闭遇到的一点点问题

    本人老菜鸟一枚,不是因为偶是菜鸟中的老手,而是偶是老了但是还是很菜的鸟╮(╯▽╰)╭,不过打今儿起偶想要腾飞…… 今天写文本文件编辑类时遇到一个小问题,下面先将问题描述一下: 1.写文本文件时都会习惯 ...

  7. go语言学习基础-编译文件

    1.创建工程在go的src目录下,比如我的go目录为/Users/yinxin/go,我创建文件夹 test路径为/Users/yinxin/go/src/test; 2.创建文件 main.go , ...

  8. JavaScript登录记住密码操作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  9. IDEA 新版本激活之后老是有弹窗 解决方法

    用了最新的版本的IDEA,然后用网上的方法破解到了2089年,但是打开IDEA的时候,老是出现一个弹窗,内容如下: This agent is for learning and research pu ...

  10. JS数据结构与算法 - 二叉树(一)基本算法

    仅供JavaScript刷题参考用. 二叉查找树和平衡二叉树 其它树:满二叉树.完全二叉树.完美二叉树.哈弗曼树.二叉查找树BST.平衡二叉树AVL 了解:红黑树,是一种特殊的二叉树.这种树可以进行高 ...