事务管理器和数据源是配置在节点中的。它们的配置大致如下
实例
1 2 3 4 5 6 7 8 9 10 11
| <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>
|
解析过程
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
| private void environmentsElement(XNode context) throws Exception { if (context != null) { if (environment == null) { // 获取 default 属性 environment = context.getStringAttribute("default"); } for (XNode child : context.getChildren()) { String id = child.getStringAttribute("id"); // 检测当前 environment 节点的 id 与其父节点 environments 的 // 属性 default 内容是否一致,一致则返回 true,否则返回 false if (isSpecifiedEnvironment(id)) { // 解析 transactionManager 节点 TransactionFactory txFactory = transactionManagerElement(child.evalNode("transactionManager")); // 解析 dataSource 节点,逻辑和插件的解析逻辑很相似,不在赘述 DataSourceFactory dsFactory = dataSourceElement(child.evalNode("dataSource")); // 创建 DataSource 对象 DataSource dataSource = dsFactory.getDataSource(); Environment.Builder environmentBuilder = new Environment.Builder(id) .transactionFactory(txFactory) .dataSource(dataSource); // 构建 Environment 对象,并设置到 configuration 中 configuration.setEnvironment(environmentBuilder.build()); } } } }
|
核心是transaction和datasource