2014-10-16 19 views
0

在dataSrouce在Java的Spring bean的配置,我試圖定義init和破壞其打電話給我的mysql的腳本,初始化和清理單元測試的屬性,如下所示的代碼:如何在數據源配置的bean xml中定義init和destroy屬性?

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="destroy" init-method="init"> 
     <property name="destroy"> 
      <value>classpath: mysql_dropuser.sql</value> 
     </property> 
     <property name="init"> 
      <value>classpath: mysql_createuser.sql,classpath: mysql_bootstrap.sql</value> 
     </property> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/mydb?useUnicode=true&amp;characterEncoding=UTF-8" /> 
    </bean> 

但我得到了錯誤:

Invalid property 'destroy' of bean class. 

我的問題是,我可以如何定義xml文件中的init和destroy方法?

回答

1

這是我曾經做過的,希望這有助於:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/testdb" /> 
    <property name="username" value="testuser" /> 
    <property name="password" value="testuser" /> 
    <property name="initialSize" value="5" /> 
    <property name="maxActive" value="20" /> 
    <property name="maxIdle" value="20" /> 
    <property name="maxWait" value="5000" /> 
</bean> 

<jdbc:initialize-database data-source="dataSource" ignore-failures="ALL"> 
    <jdbc:script execution="INIT" location="classpath:database/schemas/create_testdb.sql" /> 
    <jdbc:script execution="INIT" location="classpath:database/schemas/add_testdata.sql" /> 
    <jdbc:script execution="DESTROY" location="classpath:database/schemas/drop_testdb.sql" /> 
</jdbc:initialize-database> 
+0

謝謝,它像一個魅力。 – 2014-10-17 18:50:41

1

看起來你已經定義了init/destroy方法(它們是通過相應的屬性指定的)。而且你還應該在你的班級中使用公共無效的無參數方法。屬性有點不同;像往常一樣,他們被認爲是私人領域和公共獲取/設置方法的組合。所以在你的情況下,預計至少安裝方法public void setDestroy(String str)。請檢查你的bean的類以符合這些約定。你也可能會尋找'spring resource'(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html)注入,因爲你正在嘗試爲你的bean提供文件路徑。

+0

我沒有爲這個bean類,一切都在XML文件中。此數據源bean用於另一個bean中,如: 2014-10-17 00:28:32

+0

我必須爲此創建一個班級?或者我可以在xml文件中做所有事情? – 2014-10-17 00:33:48

+0

在Java中你總是有一個類;在你的情況下,你只需使用課堂提供的購買第三方庫。所以最好檢查一下文檔和類的描述以獲取可能的屬性和方法。據我看到根據http://commons.apache.org/proper/commons-dbcp/api-1.2.2/org/apache/commons/dbcp/BasicDataSource.html這個類沒有init或destroy方法。如果您需要執行一些初始化,那麼最好編寫一個自己的類來擴展或使用(通過注入)現有類。 – sviklim 2014-10-17 11:20:59

相關問題