Java 如何在BeanXML中为数据源配置定义init和destroy属性?

Java 如何在BeanXML中为数据源配置定义init和destroy属性?,java,database,spring,junit,apache-commons-dbcp,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">

在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>

我的问题是如何在xml文件中定义init和destroy方法?

似乎您已经定义了init/destroy方法(它们是通过相应的属性指定的)。并且在类中还应该有具有该名称的public void no-argument方法。属性有点不同;通常,它们被视为私有字段和公共get/set方法的组合。因此,在您的情况下,至少需要setter方法
public void setDestroy(String str)
。请检查bean的类以满足这些约定。您还可以寻找“spring资源”(spring resource)注入,因为您正在尝试向bean提供文件路径。

我以前就是这样做的,希望这有帮助:

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


我没有这个bean的类,所有内容都在xml文件中。这个数据源bean在另一个bean中使用,比如:我必须为此创建一个类吗?或者我可以在xml文件中做任何事情?在Java中,您总是有一个类;在您的情况下,您只需使用购买第三方库提供的类。因此,最好检查它的文档和类描述,寻找可能的属性和方法。据我所知,这个类没有init或destroy方法。如果您需要执行一些初始化,那么最好编写自己的类来扩展或使用(通过注入)现有类。
<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>