全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-20 6 分钟 ✍️ juanwangdev

environments 数据源配置

environments 元素用于配置 MyBatis 的数据库连接信息,支持多环境切换。

environments 结构

XML
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mydb?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
</environments>

注意:default 属性指定默认使用的环境 ID,每个 environmentid 必须唯一。

事务管理器

类型说明适用场景
JDBC使用 JDBC 原生的事务管理机制独立应用、手动控制事务
MANAGED由容器管理事务,MyBatis 不参与与 Spring 等框架集成

JDBC 事务管理器示例:

XML
<transactionManager type="JDBC"/>

MANAGED 事务管理器示例(通常配合 Spring 使用):

XML
<transactionManager type="MANAGED">
    <property name="closeConnection" value="false"/>
</transactionManager>

注意:MANAGED 类型默认会关闭连接,设置 closeConnection=false 可阻止该行为。

数据源类型

类型说明特点
UNPOOLED不使用连接池,每次创建新连接简单但性能差,仅适合测试
POOLED使用 MyBatis 内置连接池开箱即用,适合中小项目
JNDI从应用服务器获取数据源适合企业级部署

UNPOOLED 示例:

XML
<dataSource type="UNPOOLED">
    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</dataSource>

POOLED 示例(推荐):

XML
<dataSource type="POOLED">
    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb?useSSL=false&amp;serverTimezone=Asia/Shanghai"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
    <!-- 连接池配置 -->
    <property name="poolMaximumActiveConnections" value="20"/>
    <property name="poolMaximumIdleConnections" value="5"/>
    <property name="poolMaximumCheckoutTime" value="20000"/>
    <property name="poolTimeToWait" value="20000"/>
</dataSource>

POOLED 连接池常用参数

参数默认值说明
poolMaximumActiveConnections10最大活跃连接数
poolMaximumIdleConnections5最大空闲连接数
poolMaximumCheckoutTime20000连接最大借用时间(毫秒)
poolTimeToWait20000获取连接失败时的等待时间(毫秒)
poolPingQueryNO PING QUERY SET探测连接是否可用的 SQL
poolPingEnabledfalse是否启用连接探测
poolPingConnectionsNotUsedFor0超过此时间(毫秒)才执行 ping

多环境配置

实际项目中通常需要区分开发、测试、生产环境:

XML
<environments default="development">
    <!-- 开发环境 -->
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/dev_db?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
            <property name="poolMaximumActiveConnections" value="10"/>
        </dataSource>
    </environment>

    <!-- 测试环境 -->
    <environment id="test">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://192.168.1.100:3306/test_db?useSSL=false"/>
            <property name="username" value="test_user"/>
            <property name="password" value="test_pass"/>
            <property name="poolMaximumActiveConnections" value="15"/>
        </dataSource>
    </environment>

    <!-- 生产环境 -->
    <environment id="production">
        <transactionManager type="MANAGED"/>
        <dataSource type="JNDI">
            <property name="data_source" value="java:comp/env/jdbc/MyBatisDS"/>
        </dataSource>
    </environment>
</environments>

切换环境

方式一:修改 default 属性

XML
<!-- 默认使用开发环境 -->
<environments default="development">
XML
<!-- 切换到测试环境 -->
<environments default="test">

方式二:Java 代码指定环境

Java
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);

// 构建时指定环境
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
    .build(inputStream, "test");  // 使用 test 环境

环境切换实战

结合 Maven Profile 实现打包时自动切换环境:

XML
<!-- pom.xml -->
<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env>development</env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <env>production</env>
        </properties>
    </profile>
</profiles>

在构建时使用:

Bash
# 开发环境(默认)
mvn package

# 生产环境
mvn package -P prod

要点总结

  • environments 支持配置多个环境,通过 default 指定默认环境
  • transactionManager 有 JDBC(手动管理)和 MANAGED(容器管理)两种类型
  • dataSource 支持 UNPOOLED、POOLED、JNDI 三种类型,POOLED 最常用
  • 切换环境可通过修改 default 属性或 Java 代码指定
  • 生产环境推荐使用 MANAGED 事务 + JNDI 数据源,交由应用服务器管理连接池
  • 结合 Maven Profile 可实现不同环境打包自动切换

📝 发现内容有误?点击此处直接编辑

← 上一篇 configuration 元素结构
下一篇 → properties 属性文件
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库