Spring的DataSource配置

Spring提供了4种配置数据源(DataSource)的Bean的方式,如下所示:

  1. 通过JNDI查找的数据源
  2. 连接池数据源
  3. 由JDBC驱动程序定义的数据源
  4. Spring提供的嵌入式数据源
    这里不介绍JNDI方式的数据源,只介绍后面三种。

连接池数据源

Spring并不提供连接池数据源的实现,但是可以使用下面3种第三方的连接池数据源:

  • Apache Commons DBCP
  • c3p0
  • BoneCP
    上面说的这3种连接池可以在Spring配置为数据源。接下来介绍各种连接池的配置方式,主要介绍xml和java代码的方式来配置连接池,以及各种连接池的属性。这里说明一下,在xml和java代码方式配置中,只会创建连接池需要的4个要素:驱动名,url,用户名,密码。其他配置根据需要自行添加。这里以MySQL数据库为例来配置数据源。
    创建一个db.Properties文件,用于保存MySql相关的数据
db.driverClass=com.mysql.jdbc.Driver
db.url=jdbc:mysql://mysqlServerHost:3306/schemaName?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
db.username=root
db.password=root
  1. Apache Commons DBCP

使用xml配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">  
    <property name="driverClassName" value="${db.driverClass}"></property>  
    <property name="url" value="${db.url}"></property>  
    <property name="username" value="${db.username}"></property>  
    <property name="password" value="${db.password}"></property>    
</bean>  

属性介绍:

属性 默认值 解释
initialSize 0 当连接池启动的时候创建的初始连接数量,1.2版本后支持
maxActive 8 最大连接数数,如果为0的话,表示无限制
maxIdle 8 最大空闲连接数,如果值为0的话,表示无限制
minIdle 0 最小空闲连接数,如果0的话,表示不创建
maxOpenPreparedStatements 不限制 statement池能够同时分配的打开的statements的最大数量,0表示不限制
maxWait 无限 无可用连接是的等待时间,单位毫秒,如果值为-1时,表示无限等待;如果超时,则抛出异常
minEvictableIdleTimeMillis 1000 * 60 * 30 连接被收回前的空闲时间,超过这个时间,该连接会被收回,单位毫秒
poolPreparedStatements false 是否开启池的prepared statement 池功能
更多属性配置请参考官方文档:
DBCP官方属性配置介绍

  1. c3p0

使用XML配置:

<bean id="dataSource"  
    class="com.mchange.v2.c3p0.ComboPooledDataSource"  
    destroy-method="close">  
    <property name="driverClass" value="${db.driverClass}"></property>  
    <property name="jdbcUrl" value="${db.url}"></property>  
    <property name="user" value="${db.username}"></property>  
    <property name="password" value="${db.password}"></property>    
</bean> 

属性介绍:
属性 默认值 解释
acquireIncrement 3 当连接池中的连接用完时,C3P0一次性创建新连接的数目
minPoolSize 3 连接池中保留的最小连接数
maxPoolSize 15 连接池中保留的最大连接数
initialPoolSize 3 初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值
maxIdleTime 0 最大空闲时间,超过空闲时间的不在使用的连接将被丢弃。0表示永不丢弃
acquireRetryAttempts 30 定义在从数据库获取新连接失败后重复尝试获取的次数
acquireRetryDelay 1000 两次连接中间隔时间,单位毫秒
maxStatements 0 JDBC的标准参数,用以控制数据源内加载的PreparedStatement数量。但由于预缓存的Statement属 于单个Connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素,如果maxStatements与 maxStatementsPerConnection均为0,则缓存被关闭
maxStatementsPerConnection 0 连接池内单个连接所拥有的最大缓存Statement数
idleConnectionTestPeriod 0 隔多少秒检查所有连接池中的空闲连接
autoCommitOnClose false 连接关闭时默认将所有未提交的操作回滚
更多属性配置请参考官方文档:
c3p0官方属性配置介绍
http://www.mchange.com/projects/c3p0/#c3p0-config.xml

3.BoneCP
使用XML配置:

<bean id="dataSource"  
    class="com.jolbox.bonecp.BoneCPDataSource"  
    destroy-method="close">  
    <property name="driverClass" value="${db.driverClass}"></property>  
    <property name="jdbcUrl" value="${db.url}"></property>  
    <property name="username" value="${db.username}"></property>  
    <property name="password" value="${db.password}"></property>    
</bean>  

这种配置连接池数据源的方式用的不是很多,这里就不介绍了,详细属性配置请参考官网
BoneCP官方属性配置介绍

有JDBC驱动程序定义的数据源

这里介绍的是第三种数据源配置方式;在Spring中,配置最简单的数据源就是通过一个JDBC驱动。Spring提供了3个这样的驱动类来配置数据源,分别是:

DriverManagerDataSource:每次请求都会返回一个新的数据库连接,与连接池不同的是,返回的连接没有被池化(也就是没有放入到连接池中,当然也没有创建连接池)
SimpleDriverDataSource:同DriverManagerDataSource工作方式一样,不同的地方是,它直接使用JDBC驱动克服一下在某些环境下可能出现的类加载的问题,比如在一个OSGi容器
SingleConnectionDataSource:每次请求都返回相同的连接,尽管SingeConnectionDataSource不是一个连接池数据源,但是可以认为它是只有一个数据库连接的连接池数据源
使用这种数据源的话,3个驱动类的配置的方式是一样的,只需要将class属性换一下即可。这里就仅介绍一下DriverManagerDataSource
其他属性与DBCP配置一样。与DBCP数据源连接池的区别就是,只需要配置4个基本要素就可。
如下所示:

XML配置方式:

<bean id="dataSource"  
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="${db.driverClass}"></property>  
    <property name="url" value="${db.url}"></property>  
    <property name="username" value="${db.username}"></property>  
    <property name="password" value="${db.password}"></property>    
</bean>

这种方式配置数据源是有缺陷的,一般不在生产环境中使用这种数据源,SingleConnectionDataSource只有一个连接数,无论是正式环境还是测试环境中,在多线程的应用程序中都不能很好的工作;DriverManagerDataSource和SimpleDriverDataSource虽然能在多线程的应用程序下工作,但是每次请求都会创建出一个连接,会影响应用程序的性能。因为这些限制,所以在一般推荐使用第二种也就是连接池数据源。

Spring提供的嵌入式数据源

大多数数据库都有自己的服务端和客户端,但嵌入式数据库是作为应用程序的一部分;这种数据库不在生产环境中使用,一般使用在开发和测试环境中,因为这种数据库在应用每次重启的时候都会重置所有数据。
Spring提供了对嵌入式数据库的支持,支持如下3种嵌入式数据库:

  1. H2
  2. HSQL
  3. DERBY
    现在主要介绍一下如何配置H2嵌入式数据源,其他的方式只需要稍微修改一下即可:

Spring jdbc命名空使配置一个嵌入式数据源很简单,如下xml配置中,显示如何使用jdbc命名空间来配置一个H2嵌入式数据源

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:c="http://www.springframework.org/schema/c"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc
    http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
    ...
    <jdbc:embedded-database id="dataSource" type="H2">
    <!--如果是其他嵌入式数据源的话,设置type为HSQL或者DERBY -->
        <jdbc:script location="com/habuma/spitter/db/jdbc/schema.sql"/> 
        <jdbc:script location="com/habuma/spitter/db/jdbc/test-data.sql"/> 
    </jdbc:embedded-database>
    ...
</beans>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以回答这个问题,它属于技术领域。您可以在配置文件中设置spring.datasource.url属性来指定要连接的数据库URL。例如,如果您正在使用MySQL数据库,则可以将spring.datasource.url设置为jdbc:mysql://localhost:3306/mydatabase。 ### 回答2: spring.datasource.url用于配置数据库的连接地址。它是Spring框架中连接数据库的一个重要属性。在配置文件中,我们可以通过设置它的值来指定要连接的数据库的地址。 在URL中,通常会包含一些必要的信息,如数据库类型、服务器地址、端口号、数据库名称等。不同的数据库有不同的URL格式。例如,对于MySQL数据库,URL的格式可能是jdbc:mysql://localhost:3306/database_name,其中"jdbc:mysql://"代表驱动程序的类型和协议,"localhost"代表数据库所在的服务器地址,"3306"代表数据库服务器的端口号,"database_name"代表数据库的名称。 除了基本的数据库连接信息,URL还可以包含其他的配置项,如用户名和密码。在使用Spring框架进行数据库连接时,我们可以将这些敏感信息设置为配置文件中的属性,并在URL中引用它们。这是为了避免将敏感信息直接暴露在配置文件中,增加数据库的安全性。 通过对spring.datasource.url的正确配置,我们可以成功连接到数据库,并进行数据的读取、写入和更新等操作。对于不同的数据库,我们需要根据其要求正确设置URL的值,以保证数据库连接的成功。 综上所述,spring.datasource.url是用于配置数据库连接地址的重要属性。通过正确设置该属性的值,我们可以成功连接到指定的数据库,并进行相应的操作。 ### 回答3: spring.datasource.url配置用于指定数据库的连接地址。在使用Spring框架开发时,通常需要连接数据库来存储和读取数据。而spring.datasource.url配置就是用来指定数据库的连接地址。 连接地址的格式通常为:jdbc:mysql://host:port/database 其中,host是数据库服务器的地址,可以是IP地址或域名;port是数据库服务器的端口号,默认为3306;database是要连接的具体数据库的名称。 在配置文件中,可以通过设置spring.datasource.url属性来定义连接地址。比如: spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase 上述配置指定要连接的数据库位于本地主机上,端口为3306,数据库名称为mydatabase。 此外,连接地址还可以指定其他的配置信息,如用户名、密码、字符集等。例如: spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf8&user=root&password=123456 上述配置中,通过添加参数useUnicode=true和characterEncoding=utf8来指定使用Unicode字符集,并且通过参数user和password指定数据库登录的用户名和密码分别为root和123456。 总之,spring.datasource.url配置是用来指定数据库连接地址的,其格式为jdbc:mysql://host:port/database,可以在其中添加其他参数进行详细配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值