20200107——记spring的DataSource
Posted sunshine106
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20200107——记spring的DataSource相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章
(汇总)Spring Boot 实践折腾记 & Spring Boot 2.x 实践记