码迷,mamicode.com
首页 > 编程语言 > 详细

20200107——记spring的DataSource

时间:2020-01-07 18:08:48      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:ram   stack   nal   空间   actor   factor   app   source   lookup   

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="1234" />       
</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="1234"/>       
</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

标签:ram   stack   nal   空间   actor   factor   app   source   lookup   

原文地址:https://www.cnblogs.com/Sunshine106/p/12162543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!