2014-10-16 47 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

相关问题