2014-09-17 5 views
0

Я пытаюсь экспортировать часть большой базы данных для настройки тестирования для приложения. Я использую DBUnit для экспорта, и у меня возникает проблема с тем, что программа экспортирует часть данных, а затем несколько минут спустя.Ошибка кучи с DBUnit

Редактировать: Забыл упомянуть, что я увеличил размер памяти только для того, чтобы превышение предельных значений на GC превысило ошибку. Этот вопрос больше, чтобы увидеть, есть ли более эффективный или лучший способ сделать это.

public static void main(String[] args) throws Exception { 
    // database connection 
    Class driverClass = Class.forName("org.postgresql.Driver"); 
    Properties props = new Properties(); 
    props.setProperty("user", "someUserName"); 
    props.setProperty("password", "Not giving you the password"); 

    Connection jdbcConnection = DriverManager.getConnection("jdbc:postgresql://host:port/name", props); 
    IDatabaseConnection connection = new DatabaseConnection(jdbcConnection); 
    DatabaseConfig config = connection.getConfig(); 
    config.setProperty(DatabaseConfig.PROPERTY_ESCAPE_PATTERN, "\"?\""); 
    config.setProperty(DatabaseConfig.PROPERTY_RESULTSET_TABLE_FACTORY, new ForwardOnlyResultSetTableFactory()); 

    // partial database export 
    QueryDataSet partialDataSet = new QueryDataSet(connection); 
    partialDataSet.addTable("//I add a bunch of tables here."); 

    FlatXmlDataSet.write(partialDataSet, new FileOutputStream("partial.xml"));   

} 

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
at java.lang.Class.getDeclaredFields0(Native Method) 
at java.lang.Class.privateGetDeclaredFields(Class.java:2436) 
at java.lang.Class.getDeclaredField(Class.java:1946) 
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:212) 
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:95) 
at java.sql.SQLException.<clinit>(SQLException.java:371) 
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1861) 
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:559) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283) 
at org.dbunit.database.AbstractResultSetTable.<init>(AbstractResultSetTable.java:83) 
at org.dbunit.database.AbstractResultSetTable.<init>(AbstractResultSetTable.java:63) 
at org.dbunit.database.ForwardOnlyResultSetTable.<init>(ForwardOnlyResultSetTable.java:65) 
at org.dbunit.database.ForwardOnlyResultSetTableFactory.createTable(ForwardOnlyResultSetTableFactory.java:54) 
at org.dbunit.database.AbstractDatabaseConnection.createQueryTable(AbstractDatabaseConnection.java:90) 
at org.dbunit.database.AbstractDatabaseConnection.createTable(AbstractDatabaseConnection.java:135) 
at org.dbunit.database.QueryTableIterator.getTable(QueryTableIterator.java:143) 
at org.dbunit.dataset.stream.DataSetProducerAdapter.produce(DataSetProducerAdapter.java:83) 
at org.dbunit.dataset.xml.FlatXmlWriter.write(FlatXmlWriter.java:124) 
at org.dbunit.dataset.xml.FlatXmlDataSet.write(FlatXmlDataSet.java:378) 
at org.foo.bar.DatabaseExport.main(DatabaseExport.java:63) 
+1

Существует много информации о том, как увеличить avialable память в Java. – ControlAltDel

ответ

0

В RUN-> Конфигурация Run найти имя класса вы были работает, выберите его, нажмите на вкладку Аргументы затем добавить:

-Xms512M -Xmx1524M

к аргументам В.М. раздел

+0

Извините, что я должен был упомянуть в оригинальном посте, что я попытался увеличить свою память, чтобы привести к превышению предельного предела GC. Мой вопрос должен был увидеть, был ли более эффективный способ сделать это. – user2183985

+0

http://stackoverflow.com/questions/681133/why-does-heap-space-run-out-only-when-running-junit-tests – silfrede

Смежные вопросы