Frage

Ich habe diese Konfiguration in 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>

Wie es Datenquelle aus <environment id="development"> lädt gezeigt wird

FRAGE : Ist es möglich, während der Laufzeit Schalter Verwendung <environment id="test"> ohne XML zu modifizieren? Zum Beispiel - ich habe eine Testdatei, wo ich bin mit SqlSessionFactory und will es gesetzt programmatisch Verwendung Testumgebung

?
War es hilfreich?

Lösung

SqlSessionFactoryBuilder.build () -Methode kann eine spezifische Umgebung in XML auswählen.

Beispiel:

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

Andere Tipps

Nach dieser Seite: http://codenav.org/code.html?project=/org/mybatis/mybatis/3.2.5&path=/Source%20Packages/org.apache.ibatis.session/SqlSessionFactoryBuilder.java

Die build() Methode schließt die Leser / Input bevor jetzt SqlSessionFactory zurück. So benötigen Sie einen neuen Leser / Strom öffnen, um die zweite Sitzung zu laden. Ich entdeckte, als ich mein Konto / Sicherheitstabellen in eine separate Datenbank aus dem Haupt DB abgetrennt. Mein erster Sprung um mich immer Fehler bekommen, wenn die Bohne wurde versucht, die Sitzung Fabrik zu laden aufgrund eines Eingangsstrom-Fehler (geschlossen).

z.

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);
}

Auch wenn ich sie in separaten Try-Catch-Blöcken, so dass ich weiß, was man speziell sofort in der Log-Datei ist fehlgeschlagen.

ich dies auch als Singleton implementieren, so dass es nur zu Last Lesen Ressourcen einmal.

Kontext: Ich betreibe diese in einem Java EE-Container und verwenden Mybatis für straight forward-Abfragen und für wo ich nativen Abfragen verwenden würde, da es eine viel einfachere und geradlinig Rahmen ist. Ich könnte es über JPA wechseln überall zu verwenden, aber das ist immer noch zur Debatte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top