Kann ich die JDBC-Isolationsstufe aus einer Tomcat-Kontext?
Ich habe eine web-Anwendung, die in Tomcat 6, und ich habe es geschafft es zu konfigurieren, verwenden Sie den built-in-DBCP connection pooling, und alles funktioniert sehr gut, aber ich vermute, es läuft in die falsche Isolationsgrad für die Datenbank. Ich möchte es in read uncommitted, aber ich denke, es läuft in der read committed und wissen nicht, wie es einzustellen.
Hier ist mein Kontext-XML-Datei:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true">
<Resource
name="jdbc/Connection"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://...etc..."
/>
</Context>
- Und dies ist die Java-Methode verwendet, um eine Datenbank-Verbindung.
public Connection getDatabaseConnection() throws ServletException {
try {
InitialContext cxt = new InitialContext();
if ( cxt == null ) {
throw new ServletException( "ServletContext unavailable." );
}
DataSource ds = (DataSource)cxt.lookup( "java:/comp/env/jdbc/Connection" );
if ( ds == null ) {
throw new ServletException( "Data source not found!" );
}
Connection conn = ds.getConnection();
return conn;
} etc...
Haben, erhalten die Verbindung in getDatabaseConnection()
merke ich, könnte ich manuell festlegen der Isolationsstufe mit conn.setIsolationLevel( Connection.TRANSACTION_READ_UNCOMMITTED )
aber das fühlt sich falsch, da es entweder die hard-coding der isolation-level in die Java-oder die Durchführung einer look-up auf den servlet-Kontext, jedes mal, wenn eine neue Verbindung erforderlich ist.
Kann ich definieren, das im Zusammenhang mit dem XML-irgendwie, oder ist es ein besserer Ansatz, ich bin mir nicht bewusst?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, Sie können einstellen, dass mit defaultTransactionIsolation Attribut in der Ressource-element.
Aus der docs:
Ich war auf der Suche nach snapshot-isolation-level. Die Einstellung wurde korrekt gemeldet, indem der Datenbank-server wurde
defaultTransactionIsolation="4096"
Können Sie bestätigen, indem Sie eine Abfrage von sys.dm_exec_sessions, die melden sollten, transaction_isolation_level = 5. Hoffe, es hilft jemand.