java - 在 MyBatis 3.0.6 中使用 configuration.xml 文件并提供 DataSource 设置

标签 java configuration datasource mybatis

MyBatis 文档展示了一种通过 XML 配置文件构建 SqlSessionFactory 或通过 Java 代码构建 Configuration 对象的方法。它还提到传递将覆盖 XML 文件中指定内容的属性。

除了 XML 配置之外,我还尝试使用属性工具提供数据源 URL,但未设置该属性。

这是我正在使用的配置 XML(为简洁起见,删除了所有别名和映射):

<configuration> 
  <typeAliases>
    <typeAlias alias="Item" type="com.example.project.Item"/> 
  </typeAliases>

  <environments default="development"> 
      <environment id="development"> 
      <transactionManager type="JDBC"/> 
      <dataSource type="POOLED"> 
        <property name="driver" value="org.h2.Driver"/> 
        <property name="url" value="jdbc:h2:C:/path_to_db_file_in_the_filesystem"/>   
        <property name="username" value="sa"/> 
        <property name="password" value="sa"/>     
      </dataSource> 
    </environment> 
  </environments> 

  <mappers> 
    <mapper resource="com/example/project/mappers/ItemMapper.xml"/> 
  </mappers>

</configuration> 

XML 文件适用于所有情况,但我需要通过 Java 代码提供 url (通过代码,它是从另一个配置文件获取的,因此必须动态提供给 MyBatis) 。我知道我可以用代码完成这一切,但这将是不必要的工作,所以我想如果可能的话避免这条路线。

根据手册中的描述,我从 XML 文件中删除了 url 行,并得到了以下代码:

String resource = "com/example/project/MyBatisConfiguration.xml"; 
Reader reader = Resources.getResourceAsReader(resource); 

Properties props = new Properties();
props.setProperty("url", url);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader, props);

代码构建了SqlSessionFactory,但我收到“url不能为空”异常,表明该属性未成功覆盖。我认为该属性的名称应该采用特殊格式,但我找不到该格式是什么。

预先非常感谢您的所有帮助。

最佳答案

在配置 XML 中,您可以插入数据源 URL 的占位符,如下所示:

<property name="url" value="${url}"/>

然后,SqlSessionFactoryBuilderbuild() 方法将 XML 中的 "${url}" 替换为属性 的值“url”props 提供。

关于java - 在 MyBatis 3.0.6 中使用 configuration.xml 文件并提供 DataSource 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704510/

相关文章:

java - Mockito ArgumentCaptor 验证没有捕获任何内容

configuration - dconf/GSettings 如何以及在哪里存储配置数据?

java - 为加载到 Spring 的 Props 文件中的属性自动修剪尾随空白

IOS LaunchImage 操作 - 我可以控制它在屏幕上停留的时间吗?

javascript - Kendo UI 图的数据源可以同步到远程 API 吗?

java - 如何更改 JOptionpane 中图标的位置?

java - 在 Spring Boot 应用程序中连接到现有 ElasticSearch 实例时出现问题

java - Gradle kotlin js 模块依赖于多平台模块

Git 错误 : Permission to user1/repoA. git 拒绝 user2

java - 如何使用一个数据源以编程方式更改 Spring 中的数据库?