Spring Test DBunit Warning

前提是你 提交于 2019-12-04 00:30:32

Problem solved. I add the following configuration to applicationContext.xml (context.xml) .

<property name="location">
        <value>classpath:jdbc.properties</value>
    </property> 
</bean>  

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
</bean>

<bean id="sqlDataTypeFactory" class ="org.dbunit.ext.mysql.MySqlDataTypeFactory" />

<bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean">
     <property name = "datatypeFactory" ref = "sqlDataTypeFactory" />
</bean> 
<bean id="dbUnitDatabaseConnection" class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean">
    <property name="databaseConfig" ref="dbUnitDatabaseConfig"/>
    <property name="dataSource" ref="dataSource" />
</bean>

Just wanted to add the same solution as Java Config:

@Bean
public DataSource dataSource() {
    DataSource dataSource = ...
    return dataSource;
}

@Bean
public DatabaseConfigBean dbUnitDatabaseConfig() {
    DatabaseConfigBean dbConfig = new com.github.springtestdbunit.bean.DatabaseConfigBean();
    dbConfig.setDatatypeFactory(new org.dbunit.ext.h2.H2DataTypeFactory());
    return dbConfig;
}

@Bean
public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection() {
    DatabaseDataSourceConnectionFactoryBean dbConnection = new com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean(dataSource());
    dbConnection.setDatabaseConfig(dbUnitDatabaseConfig());
    return dbConnection;
}

To complement the existing answers, I just wanted to add what worked for me in a Spring Boot context, using the Spring Boot configured datasource. Add the following class in your test sources (in a package that will be picked up by autoconfig) :

@Configuration
public class DBUnitConfig {

    @Autowired
    private DataSource dataSource;

    @Bean
    public DatabaseDataSourceConnectionFactoryBean dbUnitDatabaseConnection() {
        DatabaseConfigBean bean = new DatabaseConfigBean();
        bean.setDatatypeFactory(new H2DataTypeFactory());

        DatabaseDataSourceConnectionFactoryBean dbConnectionFactory = new com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean(dataSource);
        dbConnectionFactory.setDatabaseConfig(bean);
        return dbConnectionFactory;
    }
}

Thanks to Lynn Niño. The answer helped me to correct the configuration for my H2 Database:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <context:component-scan base-package="isi.power.share" />

    <tx:annotation-driven transaction-manager="transactionManager" />

    <!-- H2 database JDBC settings -->    
    <bean id="dataSource"
          class="org.h2.jdbcx.JdbcDataSource">
        <property name="URL" value="jdbc:h2:mem:paging;DB_CLOSE_DELAY=-1;MODE=MySQL;INIT=CREATE SCHEMA IF NOT EXISTS my_extra_schema;"/>
        <property name="user" value="root"/>
        <property name="password" value="password"/>
    </bean>    

    <!-- set the data type factory for dbunit -->
    <bean id="h2DataTypeFactory" class ="org.dbunit.ext.h2.H2DataTypeFactory" />

    <bean id="dbUnitDatabaseConfig" class="com.github.springtestdbunit.bean.DatabaseConfigBean"> 
         <property name = "datatypeFactory" ref = "h2DataTypeFactory" /> 
    </bean>  

    <bean id="dbUnitDatabaseConnection" class="com.github.springtestdbunit.bean.DatabaseDataSourceConnectionFactoryBean"> 
        <property name="databaseConfig" ref="dbUnitDatabaseConfig"/> 
        <property name="dataSource" ref="dataSource" /> 
    </bean> 

    <!-- provide a H2 console to look into the db if necessary -->
    <bean id="org.h2.tools.Server-WebServer" class="org.h2.tools.Server"
        factory-method="createWebServer" depends-on="dataSource"
        init-method="start" lazy-init="false">
        <constructor-arg value="-web,-webAllowOthers,-webPort,8085" />
    </bean>

    <!-- provide a TCP server to look into the db if necessary -->
    <bean id="org.h2.tools.Server-TcpServer" class="org.h2.tools.Server"
        factory-method="createTcpServer" depends-on="dataSource"
        init-method="start" lazy-init="false">
        <constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9095" />
    </bean>

    <!-- define database entity manager factory & transaction manager -->

    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
        </property>
        <property name="persistenceXmlLocation"  value="classpath:META-INF/SpringDatabaseTestPersistence.xml" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />     
    </bean>


</beans>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!