我有这样的配置 ibatis-config.xml

<configuration>
    <properties resource="collector.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${dev.jdbc.driver}" />
                <property name="url" value="${dev.jdbc.url}" />
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${test.jdbc.driver}" />
                <property name="url" value="${test.jdbc.url}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
    </mappers>
</configuration>

如图所示它将负荷的数据源自 <environment id="development">

的问题:它可能在运行时间开关使用 <environment id="test"> 没有修改XML?例如-我有一个测试文件在哪里我在使用 SqlSessionFactory 并希望它设置的编程方式使用的测试环境?

有帮助吗?

解决方案

SqlSessionFactoryBuilder.建立()方法可以选择一个特定的环境中XML。

例如,

private Reader reader;
private SqlSessionFactory sqlSessionFactorys;
private SqlSession session;

reader = Resources.getResourceAsReader("ibatis-config.xml");

sqlSessionFactorys = new SqlSessionFactoryBuilder().build(reader, "test");
testSession = sqlSessionFactorys.openSession(); // test env

sqlSessionFactorys = new SqlSessionFactoryBuilder().build(reader, "development");
devSession = sqlSessionFactorys.openSession(); // dev env

其他提示

根据这个网站:http://codenav.org/code.html?project=/org/mybatis/mybatis/3.2.5&path=/Source%20Packages/org.apache.ibatis.session/SqlSessionFactoryBuilder.java

build() 方法中关读者/返回之前输入流SqlSessionFactory。所以你需要打开一个新的读者/流,以便负载第二届会议。我发现这个的时候我分离出我的账户/安全表以一个单独的数据库的主要应用程序的数据库。我的第一个绕过去我一直得到错误的当豆是要载入该届会议的工厂由于输入流的错误(关闭)。

例如

try {
    inputStream = Resources.getResourceAsStream(MYBATIS_CONFIG_PATH);
    prodDbSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, prodDbEnvironment);
    inputStream = Resources.getResourceAsStream(MYBATIS_CONFIG_PATH);
    securityDbSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, securityDbEnvironment);
} catch (IOException ex) {
    String msg = "Unable to get SqlSessionFactory";
    CustomizedLogger.LOG(Level.SEVERE, this.getClass().getCanonicalName(), "methodName", msg, ex);
}

虽然我把它们放在单独的试图抓住块,这样,我知道其中一个失败的具体权利在登录文件。

我也实施这个作为单独所以,它只有到载载的资源的一次。

上下文:我经营这个在Java EE容器和使用实际为直前的查询和对,我将使用本地的查询,因为它是一个更简单和直接的框架。我可能会关于使用它在访问用户无处不在,但仍然是辩论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top