如何在bean xml中为dataSource配置定义init和destroy属性?

时间:2014-10-16 23:29:23

标签: java database spring junit apache-commons-dbcp

在dataSrouce的Java Spring bean配置中,我尝试定义init和destroy属性,这些属性调用我的mysql脚本作为单元测试的初始化和清理,如下所示:

   <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方法?

2 个答案:

答案 0 :(得分:1)

好像你已经定义了init / destroy方法(它们是通过相应的属性指定的)。并且您还应该在类中使用公共的void无参数方法。属性有点不同;像往常一样,它们被视为私有领域和公共获取/设置方法的组合。所以在你的情况下,至少需要setter方法public void setDestroy(String str)。请检查您的bean课程以满足这些约定。您也可以寻找弹簧资源&#39; (http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html)注入,因为您正在尝试向您的bean提供文件路径。

答案 1 :(得分: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>