0%

9.2 深入Mybatis配置文件 9.2.7 environments配置环境

9.2 深入Mybatis配置文件 9.2.7 environments配置环境

MyBatis的环境配置实际就是数据源的配置。MyBatis可以配置多种环境,这种机制使得MyBatis可以将SQL映射应用于多种数据库中。例如,开发、测试和生产环境需要有不同的配置;多个生产数据库想使用相同的SQL映射等等。

每个数据库对应一个SqlSessionFactory

尽管可以配置多个环境,但是每个SqlSessionFactory实例只能选择一个环境,即每个数据库对应一个SqlSessionFactory实例。所以,如果你想连接两个数据库,就需要创建两个SqlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推。

环境配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!-- 环境配置,即连接的数据库。 -->
<environments default="development">
<environment id="development">
<!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
<transactionManager type="JDBC">
<property
name="..."
value="..."/>
<transactionManager>
<!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
<dataSource type="POOLED">
<!-- 使用配置文件db.properties中设置的driver属性值给该driver属性赋值 -->
<property
name="driver"
value="${driver}"/>
<!-- 使用配置文件db.properties中设置的url属性值给该url属性赋值 -->
<property
name="url"
value="${url}"/>
<!-- 使用配置文件db.properties中设置的username属性值给该username属性赋值 -->
<property
name="username"
value="${username}"/>
<!-- 使用配置文件db.properties中设置的password属性值给该password属性赋值 -->
<property
name="password"
value="${password}"/>
</dataSource>
</environment>
</environments>

环境配置关键点

注意这里的关键点:

  • 默认的环境id(,environments default="development")
  • 每个environment元素定义的环境id(比如,environment id="development")
  • 事务管理器transactionManager的配置(比如,transactionManager type="JDBC")。
  • 数据源dataSource的配置(比如,dataSource type="POOLED")

环境配置

环境environmentid可以随意命名,建议简洁有意义,而environments的默认环境一定要匹配定义的其中一个环境

事务管理器配置

事务管理器类型

transactionManager标签,表示事务管理器配置,在MyBatis中有JDBCMANAGED两种类型的事务管理器:
JDBC,这个配置直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。
MANAGED(managed),这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如Java EE应用服务器的上下文)。默认情况下它会关闭连接然而一些容器并不希望这样,可以将closeConnection属性设置为false来阻止它默认的关闭行为:

managed类型事务管理示例

transactionManagerMANAGED配置示例如下

1
2
3
4
5
<transactionManager type="managed">
<property
name="closeConnection"
value="false"/>
</transactionManager>

使用Spring+MyBatis不需要配置事务管理器

如果开发者使用Spring+MyBatis,则没有必要配置事务管理器,因为Spring模块会使用自带的管理器来覆盖MyBatis的事务管理器配置

数据源配置

dataSource标签表示数据源配置,在MyBatis中有UNPOOLEDPOOLEDJNDI种数据源类型

unpooled

UNPOOLED(unpooled)这个数据源的实现只是每次被请求时打开和关闭连接。它对没有性能要求的简单应用程序是一个很好的选择。不同的数据库在这方面表现也是不一样的。UNPOOLED类型的数据源仅仅需要配置以下5种属性

  • poolMaximumActiveConnections。在任意时间可以存在的活动(也就是正在使用)连接数量,默认值是10。
  • poolMaximumIdleConnections。任意时间可能存在的空闲连接数
  • poolMaximumCheckoutTime。在被强制返回之前,池中连接被检出(checkedout)时间,默认值为20000ms(即20s)
  • poolTimeToWait。这是一个底层设置,如果获取连接花费相当长的时间,它会给连接池打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直安静地失败),默认值为20000ms(即20s)。
  • poolPingQuery。发送到数据库的侦测查询,用来检验连接是否处在正常工作秩序中并准备接受请求。默认是”NO PING QUERY SET“,这会导致多数数据库驱动失败时带有一个恰当的错误消息
  • poolPingEnabled。是否启用侦测查询。若开启,也必须使用一个可执行的SQL语句设置poolPingQuery属性(最好是一个非常快的SQL),默认值为false
  • poolPingConnectionsNotUsedFor。配置poolPingQuery的使用频度。其可以被设置成匹配具体的数据库连接超时时间,来避兔不必要的侦测,默认值为0(即所有连接每一时刻都被侦测,当然仅当poolPingEnabledtrue时适用)。
  • JNDI。这个数据源的实现是为了能在如EJB或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。这种数据源配置只需要两个属性:
    • initial_context。这个属性用来在InitialContext中寻找上下文(即initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么data_source属性将会直接从InitialContext中寻找。
    • data_source。这是引用数据源实例位置的上下文路径。若提供了initial_context配置则会在其返回的上下文中进行查找,没有提供则直接在InitialContext中查找dataSourceJDNI配置示例如下:

懒得打字示例省略

原文链接: 9.2 深入Mybatis配置文件 9.2.7 environments配置环境