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,每个environment的id必须唯一。
事务管理器
| 类型 | 说明 | 适用场景 |
|---|---|---|
| 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&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 连接池常用参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| poolMaximumActiveConnections | 10 | 最大活跃连接数 |
| poolMaximumIdleConnections | 5 | 最大空闲连接数 |
| poolMaximumCheckoutTime | 20000 | 连接最大借用时间(毫秒) |
| poolTimeToWait | 20000 | 获取连接失败时的等待时间(毫秒) |
| poolPingQuery | NO PING QUERY SET | 探测连接是否可用的 SQL |
| poolPingEnabled | false | 是否启用连接探测 |
| poolPingConnectionsNotUsedFor | 0 | 超过此时间(毫秒)才执行 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 可实现不同环境打包自动切换
📝 发现内容有误?点击此处直接编辑