zoukankan      html  css  js  c++  java
  • MyBatis配置项--配置环境(environments)--数据源(dataSource)

    数据源(dataSource)

    dataSource元素使用标准的JDBC数据源接口来配置JDBC连接对象的资源。

    ·许多MyBatis的应用程序会按示例中的例子来配置数据源。虽然是可选的,但为了使用延迟加载,数据源是必须配置的。

    有三种内建的数据源类型(也就是type=”[UNPOOLED | POOLED | JNDI]”):

    UNPOOLED

    这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。不同的数据库在性能方面的表现也是不一样的,对于某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。UNPOOLED类型的数据源仅仅需要配置以下5种属性:

    ·driver:这是JDBC驱动的java类的完全限定名(并不是JDBC驱动中可能包含的数据源类)

    ·url:这是数据库的JDBC URL地址

    ·username:登录数据库的用户名

    ·password:登录数据库的密码

    ·defaultTransactionIsolationLevel:默认的连接事务隔离级别

    作为可选项,也可以传递属性给数据库驱动。要这样做,属性的前缀为”driver.”,例如:

    ·driver.encoding=UTF8

    这将通过DriverManager.getConnection(url,driverProperties)方法传递值为UTF8的encoding属性给数据库驱动。

    POOLED

    这种数据源的实现利用“池”的概念将JDBC连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。这是一种使得并发web应用快速响应请求的流行处理方式。

    除了上述提到的UNPOOLED下的属性外,还有更多属性用来配置POOLED的数据源:

    ·poolMaximumActiveConnections:在任意时间可以存在的活动(也就是正在使用)连接数量,默认值:10

    ·poolMaximumIdleConnections:任意时间可能存在的空闲连接数

    ·poolMaximumCheckoutTime:在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000毫秒(既20秒)

    ·poolTimeToWait:这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直安静的失败),默认值:20000毫秒(既20秒)

    ·poolMaximumLocalBadConnectionTolerance:这是一个关于坏连接容忍度的底层设置,作用于每一个尝试从缓存池获取连接的线程。如果这个线程获取到的连接是一个坏的连接,那么这个数据源允许这个线程尝试重新获取一个新的连接,但是这个重新尝试的次数不应该超过poolMaximumIdleConnections与poolMaximumLocalBadConnectionTolerance之和。默认值:3(新增于3.4.5)

    ·poolPingQuery:发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。默认是”NO PING QUERY SET”,这会导致多数数据库驱动失败时带有一个恰当的错误信息。

    ·poolPingEnabled:是否启用侦测查询。若开启,需要设置poolPingQuery属性为一个可执行的SQL语句(最好是一个速度非常快的SQL),默认值:false。

    ·poolPingConnectionsNotUsedFor:配置poolPingQuery的频率。可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(既所有连接每一时刻都被侦测 – 当然仅当poolPingEnabled为true时适用)。

    JNDI

    这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。这种数据源配置只需要两个属性:

    ·initial_context:这个属性用来在InitialContext中寻找上下文(既,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么data_source属性将会直接从InitialContext中寻找。

    ·data_source:这是引用数据源实例位置的上下文的路径。提供了initial_context配置时会在其返回的上下文中进行查找,没有提供时则直接在InitialContext中查找。

    和其他数据源配置类似,可以通过添加前缀 “env.”直接把属性传递给初始上下文。比如:

    ·env.encoding=UTF8

    这会在初始上下文(InitialContext)实例化时往它的构造方法传递值为UTF8的encoding属性。

    可以通过实现接口org.apache.ibatis.datasource.DataSourceFactory来使用第三方数据源:

    public interface DataSourceFactory {

      void setProperties(Properties props);

      DataSource getDataSource();

    }

    org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory可被用作父类来构建新的数据源适配器,比如下面这段插入C3P0数据源所必须的代码:

    import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;

    import com.mchange.v2.c3p0.ComboPooledDataSource;

           

    public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {

      public C3P0DataSourceFactory() {

        this.dataSource = new ComboPooledDataSource();

      }

    }

    为了令其工作,记得为每个希望MyBatis调用的setter方法在配置文件中增加对应的属性。下面是一个可以连接至PostgreSQL数据库的例子:

    <dataSource type="org.myproject.C3P0DataSourceFactory">

      <property name="driver" value="org.postgresql.Driver"/>

      <property name="url" value="jdbc:postgresql:mydb"/>

      <property name="username" value="postgres"/>

      <property name="password" value="root"/>

    </dataSource>

    转载于:https://www.cnblogs.com/arrows/p/10340703.html

  • 相关阅读:
    1046 Shortest Distance (20 分)(模拟)
    1004. Counting Leaves (30)PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
    1041 Be Unique (20 分)(hash散列)
    1036 Boys vs Girls (25 分)(查找元素)
    1035 Password (20 分)(字符串处理)
    1044 Shopping in Mars (25 分)(二分查找)
    onenote使用小Tip总结^_^(不断更新中...)
    1048 Find Coins (25 分)(hash)
    三个故事
    领导者的举止
  • 原文地址:https://www.cnblogs.com/twodog/p/12135218.html
Copyright © 2011-2022 走看看