diff --git a/src/de/diddiz/LogBlock/Consumer.java b/src/de/diddiz/LogBlock/Consumer.java index 9e23597..9c1be5c 100644 --- a/src/de/diddiz/LogBlock/Consumer.java +++ b/src/de/diddiz/LogBlock/Consumer.java @@ -293,10 +293,11 @@ public class Consumer extends TimerTask } public void writeToFile() throws FileNotFoundException { - final File file = new File("plugins/LogBlock/consumer/queue.sql"); - file.getParentFile().mkdirs(); - final PrintWriter writer = new PrintWriter(file); + final long time = System.currentTimeMillis(); final Set insertedPlayers = new HashSet(); + int counter = 0; + new File("plugins/LogBlock/import/").mkdirs(); + PrintWriter writer = new PrintWriter(new File("plugins/LogBlock/import/queue-" + time + "-0.sql")); while (!queue.isEmpty()) { final Row r = queue.poll(); if (r == null) @@ -308,6 +309,11 @@ public class Consumer extends TimerTask } for (final String insert : r.getInserts()) writer.println(insert); + counter++; + if (counter % 1000 == 0) { + writer.close(); + writer = new PrintWriter(new File("plugins/LogBlock/import/queue-" + time + "-" + counter / 1000 + ".sql")); + } } writer.close(); } diff --git a/src/de/diddiz/LogBlock/LogBlock.java b/src/de/diddiz/LogBlock/LogBlock.java index 7874d90..d3bea7c 100644 --- a/src/de/diddiz/LogBlock/LogBlock.java +++ b/src/de/diddiz/LogBlock/LogBlock.java @@ -5,6 +5,7 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; +import java.io.FilenameFilter; import java.net.URL; import java.sql.Connection; import java.sql.ResultSet; @@ -66,7 +67,7 @@ public class LogBlock extends JavaPlugin updater = new Updater(this); log.info("[LogBlock] Version check: " + updater.checkVersion()); config = new Config(this); - File file = new File("lib/mysql-connector-java-bin.jar"); + final File file = new File("lib/mysql-connector-java-bin.jar"); if (!file.exists() || file.length() == 0) download(log, new URL("http://diddiz.insane-architects.net/download/mysql-connector-java-bin.jar"), file); if (!file.exists() || file.length() == 0) @@ -77,24 +78,39 @@ public class LogBlock extends JavaPlugin if (updater.update()) config = new Config(this); updater.checkTables(); - file = new File("plugins/LogBlock/consumer/queue.sql"); - if (file.exists()) { - log.info("[LogBlock] Found stored queue. Try to import now."); + final File[] imports = new File("plugins/LogBlock/import/").listFiles(new FilenameFilter() { + @Override + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(".sql"); + } + }); + if (imports != null && imports.length > 0) { + log.info("[LogBlock] Found " + imports.length + "imports."); Connection conn = null; try { conn = getConnection(); conn.setAutoCommit(false); - final Statement state = conn.createStatement(); - final BufferedReader reader = new BufferedReader(new FileReader(file)); - String insert = null; - while ((insert = reader.readLine()) != null) - state.execute(insert); - conn.commit(); - reader.close(); - file.delete(); + final Statement st = conn.createStatement(); + for (final File sqlFile : imports) + try { + log.info("[LogBlock] Trying to import " + sqlFile.getName() + " ..."); + final BufferedReader reader = new BufferedReader(new FileReader(sqlFile)); + String line = null; + while ((line = reader.readLine()) != null) + st.addBatch(line); + st.executeBatch(); + conn.commit(); + reader.close(); + sqlFile.delete(); + log.info("[LogBlock] Successfully imported " + sqlFile.getName() + "."); + } catch (final Exception ex) { + log.log(Level.WARNING, "[LogBlock] Failed to import " + sqlFile.getName() + ": ", ex); + file.renameTo(new File("plugins/LogBlock/import/" + sqlFile.getName() + ".failed")); + } + st.close(); log.info("[LogBlock] Successfully imported stored queue."); } catch (final Exception ex) { - log.log(Level.WARNING, "[LogBlock] Failed to import stored queue: ", ex); + log.log(Level.WARNING, "[LogBlock] Error while importing: ", ex); } finally { if (conn != null) conn.close();