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行。