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. 03 串口发送端口Rs232之简单驱动1

    前言: 最近想实际做两个项目,认真学习怎么做一个系统,所以在看FPGA小梅哥2019的培训课程,发现他是从各个模块讲起,就是没有直接讲一个整体的系统,而是从一些模块开始,如串口发送.刚开始我想直接创造 ...

  2. 干货 | Python进阶系列之学习笔记(四)

    目录 Python条件判断 Python循环语句 Python循环控制 迭代器与生成器 异常 一.Python 条件判断 如果某些条件满足,才能做某件事情:条件不满足时,则不能做,这就是所谓的判断. ...

  3. 深入理解Java AIO(一)—— Java AIO的简单使用

    深入理解Java AIO(一)—— Java AIO的简单使用 深入理解AIO系列分为三个部分 第一部分也就是本节的Java AIO的简单使用 第二部分是AIO源码解析(只解析关键部分)(待更新) 第 ...

  4. Mysql 截取字符串总结

    MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...

  5. Python第三方包之pretty-errors

    Python第三方包之pretty-errors 发现了一个第三方好用的python包,这个包可以让我们在面对冗长的错误时候能够一眼看到重点 安装方式 pip install pretty-error ...

  6. Windows之wsl简单配置

    Windows的wsl是Windows环境下启动的一个Linux环境,通常我们安装的是Ubuntu版本. 1.安装和简单配置 这里推荐一个文章,按照文章一步一步完全做就行 https://www.ji ...

  7. JS必看面试题

    https://www.jianshu.com/p/f1f39d5b2a2e 1. javascript的typeof返回哪些数据类型. 答案:string,boolean,number,undefi ...

  8. rem布局和使用js rem动态改变字体大小,自适应

    解决rem文字动态改变字体大小: <script> console.log(window.devicePixelRatio); var iScale = 1; iScale = iScal ...

  9. SciPy - 正态性 与 KS 检验

    假设检验的基本思想 若对总体的某个假设是真实的,那么不利于或者不能支持这一假设的事件A在一次试验中是几乎不可能发生的:如果事件A真的发生了,则有理由怀疑这一假设的真实性,从而拒绝该假设: 假设检验实质 ...

  10. git 从另一个分支融合部分文件

    # git checkout master # git checkout anotherBranch -- abc ./etc # git commit -m "merge some fil ...