1

Context.xml

<jdbc:initialize-database data-source="dataSource" ignore-failures="ALL">
    <jdbc:script location="classpath:scrubd.sql"/>
</jdbc:initialize-database>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver"/>
    <property name="url" value="jdbc:hsqldb:mem:mydb"/>
    <property name="username" value="sa"/>
    <property name="password" value=""/>
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
      depends-on="dataSource"
      name="_sessFac"> 
    <property name="dataSource" ref="dataSource"/>      
    <property name="configLocation" value="hibernate.cfg.xml.incDTD"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.connection.shutdown">true</prop>
        </props>
    </property>
</bean>

単体テストでantターゲットを実行しているときに、Springが最初に初期化された後、メモリ不足エラーが発生します。それでも、データベースimport.sqlに名前を付けてhibernateに処理させるだけでテーブルにデータを入力すると、これがメモリ不足エラーになることはありません。

なぜこれが起こるのですか?

また、Springは、休止状態よりもデータベースにデータをロードするのに約1秒長くかかります。ボーナスは、その理由を説明できる人なら誰でも指します。

StackTrace(antから)

Caused by: java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:234)
at java.lang.StringBuffer.toString(StringBuffer.java:561)
at org.apache.tools.ant.util.StringUtils.replace(StringUtils.java:92)
at org.apache.tools.ant.util.DOMElementWriter.encodedata(DOMElementWriter.java:501)
at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:236)
at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:221)

そして、それを引き起こしているBeanは、「Bean」とは呼ばないので、私のセッションファクトリでなければなりません<jdbc:initialize-database/>

スタックトレースに基づいて、SQLスクリプト全体が非常に大きいため、文字列に読み込まれていると言いたいです。〜38K行。

4

1 に答える 1

0

それをねじ込み、ハイバネートにテーブルを移入させるだけで終わった。単体テストを実行しているときに 20mB のファイルを読み込んでいて、まだ休止状態でメモリ不足エラーが発生していないという事実から、単体テストを実行する前にテーブルにデータを入力したい場合は、そうしないでください。春にやらせてください。生活し、学びます。

于 2012-07-24T14:57:01.847 に答える