(读书笔记)mybatis (三)-----environments详解

Mybatis可以配置成适应多种环境,这种机制有助于将SQL映射应用于多种数据库之中,显示情况下有多重理由需要这么做。例如:开发,测试和生产环境需要不同的配置;或者共享相同的Schema的多个上产数据库,想使用相同的sql映射。注意:可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一

如果想连接两个数据库,就需要创建两个SQlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,以此类推。

每个数据库对应一个SqlSessionFactory实例

为了指定创建那种环境,只要将它作为可选的参数传递给SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:

SqlSessionFactory factory =  new SqlSessionFactoryBuilder.build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder.build(reader, environment,properties);

如果忽略了环境参数,那么默认环境将会被加载,如下所示:

SqlSessionFactory factory = new SqlSessionFactoryBuilder.build(reader);
SqlSessionFactory factory = new SqlSessionFactoryBuilder.build(reader,properties);

环境元素配置环境:

<environments default="development">
         <environment id="development">
             <transactionManager type="JDBC" />
             <!-- 配置数据库连接信息 -->
             <dataSource type="POOLED">
                 <!-- value属性值引用db.properties配置文件中配置的值 -->
                 <property name="driver" value="${driver}" />
                 <property name="url" value="${url}" />
                 <property name="username" value="${name}" />
                 <property name="password" value="${password}" />
             </dataSource>
         </environment>
     </environments>

  • 默认的环境ID(比如:default:"development")development : 开发模式    work : 工作模式
  • 每个 environment 元素定义的环境 ID(比如:id=”development”)。
  • 事务管理器的配置(比如:type=”JDBC”)
  • 数据源的配置(比如:type=”POOLED”)。

默认的环境和环境 ID 是一目了然的。随你怎么命名,只要保证默认环境要匹配其中一个环境ID。

事务管理器(transactionManager)

事务管理器有两种:type="[ JDBC | MANAGED ]":

JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。

MANAGED :这个配置从来都不提交和回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE应用服务的上下文)。默认情况下他会关闭连接,然而一些容器并不希望这样,因此需要将closeConnection属性设置为false来阻止它默认的关闭行为。

<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>
如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

dataSource--数据源

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

三种内建的数据源类型:type=[ UNPOOLED | POOLED | JNDI ]
UNPOOLED - 这个数据源的实现只是每次请求时打开和关闭连接。虽然一点慢,他对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择,不同的数据库在这方面表现也是不一样的,所以对某些数据库来说使用连接池并不重要,这个配置也是理想的。UNPOOLED类型的数据源仅仅需要配置一下5种属性:

  • driver:JDBC驱动的java类的完全限定名
  • url:数据库的JDBC URL地址
  • userName: 登录数据库的用户名
  • password : 登录数据库的密码
  • dedaultTransactionIsolationLevel– 默认的连接事务隔离级别。

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

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

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

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

  • poolMaximumActiveConnections-在任意时间可以存在的活动(也就是正在使用)连接数量,默认值:10
  • poolMaximumIdleConnections - 任意时间可能存在的空闲连接数。
  • poolMaximumCheckoutTime - 再被强制返回之前,池中连接被检出时间,默认值2W毫秒  即20s
  • poolTimeToWait - 这是一个底层设置,如果获取连接花费的相当长的时间,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直安静的失败),默认值:2W毫秒即 20 s
  • PoolPingQuery - 发送到数据库的侦测查询,用来检验连接是否处在正常工作秩序中并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动失败时带有一个恰当的错误消息
  • PoolPingConnectionsNotUsedFor -配置 poolPingQuery 的使用频度。这可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。

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

  • initial_context - 这个属性用来InitailContext中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么 data_source 属性将会直接从 InitialContext 中寻找
  • data_source - 这是引用数据源实例位置的上下文的路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找

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

  env.encoding=UTF8

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

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值