Curious: is there a perf hit in getting the connection metadata?

Gary

<div>-------- Original message --------</div><div>From: [email protected] 
</div><div>Date:08/05/2014  00:35  (GMT-05:00) </div><div>To: 
[email protected] </div><div>Subject: svn commit: r1615861 -
  
/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
 </div><div>
</div>Author: mattsicker
Date: Tue Aug  5 04:35:41 2014
New Revision: 1615861

URL: http://svn.apache.org/r1615861
Log:
Add basic batch update support for JDBC appender.

  - Part of LOG4J2-734

Modified:
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java?rev=1615861&r1=1615860&r2=1615861&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jdbc/JdbcDatabaseManager.java
 Tue Aug  5 04:35:41 2014
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.ap

import java.io.StringReader;
import java.sql.Connection;
+import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
@@ -43,6 +44,7 @@ public final class JdbcDatabaseManager e

     private Connection connection;
     private PreparedStatement statement;
+    private boolean isBatchSupported;

     private JdbcDatabaseManager(final String name, final int bufferSize, final 
ConnectionSource connectionSource,
                                 final String sqlStatement, final List<Column> 
columns) {
@@ -53,8 +55,11 @@ public final class JdbcDatabaseManager e
     }

     @Override
-    protected void startupInternal() {
-        // nothing to see here
+    protected void startupInternal() throws Exception {
+        this.connection = this.connectionSource.getConnection();
+        final DatabaseMetaData metaData = this.connection.getMetaData();
+        this.isBatchSupported = metaData.supportsBatchUpdates();
+        Closer.closeSilently(this.connection);
     }

     @Override
@@ -109,7 +114,9 @@ public final class JdbcDatabaseManager e
                 }
             }

-            if (this.statement.executeUpdate() == 0) {
+            if (this.isBatchSupported) {
+                this.statement.addBatch();
+            } else if (this.statement.executeUpdate() == 0) {
                 throw new AppenderLoggingException(
                         "No records inserted in database table for log event 
in JDBC manager.");
             }
@@ -125,6 +132,9 @@ public final class JdbcDatabaseManager e
     protected void commitAndClose() {
         try {
             if (this.connection != null && !this.connection.isClosed()) {
+                if (this.isBatchSupported) {
+                    this.statement.executeBatch();
+                }
                 this.connection.commit();
             }
         } catch (final SQLException e) {


Reply via email to