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. Python第七章-面向对象

    面向对象编程基础 一.面向对象概念 1.1 什么是面向过程 ​ 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. ​ 生活中的的例子举例. 1.2 ...

  2. 巴什博弈 HDU-1846

    描述:一堆石子有 n 个 ,两个人开始轮流取,每人最多取m个,最少取1个,最后一个将石子取完的是赢家. 思路:对于先手来说,如果有(m+1)个石子,先手取 k 个,后手就可以取 m+1-k 个,所以有 ...

  3. iOS 引用计数

    一.简介 OC 在创建对象时,不会直接返回该对象,而是返回一个指向对象的指针. OC 在内存管理上采用了引用计数,它是一个简单而有效管理对象生命周期的方式.在对象内部保存一个用来表示被引用次数的数字, ...

  4. iOS 响应链

    一.UIResponder app 使用响应者对象接收和处理事件,只有继承 UIResponder 的类,才能处理事件. UIApplication.UIView.UIViewController 都 ...

  5. thinkphp5.1中使用链式操作的坑

    1.在进行tp5->tp5.1的时候,没有想太多,直接使用之前的代码:结果在该操作中,多次调用该get方法,tp5.1的链式操作一直保持了之前的搜索条件,截图如下:(具体的代码没有展示) 2.然 ...

  6. 尴尬,通篇使用 if

    以给博客园头部导航条链接添加图标为例, 接下来看看如何分别使用对象.数组.Map 优化它的. 前置 1.接下来给头部导航条添的图标包含: 博客园首页 新随笔 博客首页 联系 订阅 管理 2.这里封装了 ...

  7. 封装一个通用的PopupWindow

    上篇文章是关于建造者设计模式的,今天顺便封装一个通用的 PopupWindow 来实践一下, 同时也方便以后使用 PopupWindow,本文将从下面几个方面来介绍 PopupWindow 及其封装, ...

  8. 【tensorflow2.0】处理文本数据

    一,准备数据 imdb数据集的目标是根据电影评论的文本内容预测评论的情感标签. 训练集有20000条电影评论文本,测试集有5000条电影评论文本,其中正面评论和负面评论都各占一半. 文本数据预处理较为 ...

  9. 001_创建一个sidebar切换页面

    Table Of Content 准备 基本思路 实现 我们期望实现这样的效果: ![](https://img2018.cnblogs.com/blog/1735896/202001/1735896 ...

  10. C# 快速开发框架搭建—环境搭建

    一.新建MVC项目 打开vs2013新建空的解决方案,在解决方案中增加一个MVC项目,如图: 删除不需要的文件,剩下如图所示的文件夹: 首先创建一个MVC5控制器(Login,登入使用),该控制器无需 ...