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

时间:2011-10-09 15:21:47

标签: java configuration datasource mybatis

MyBatis文档显示了通过Java代码构建SqlSessionFactory到XML配置文件或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 not not null”异常,表明该属性未被成功覆盖。我认为该属性的名称应采用特殊格式,但我无法找出该格式是什么。

提前感谢所有帮助。

1 个答案:

答案 0 :(得分:1)

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

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

然后,build() SqlSessionFactoryBuilder方法将"${url}"替换为"url"props提供的属性{{1}}。