Вопрос

Я использую dbunit в последней версии 2.4.8, и я получаю много предупреждений в моем модульном тестах с этим сообщением:

WARN : org.dbunit.dataset.AbstractTableMetaData - 
Potential problem found: The configured data type factory 
    'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' 
     might cause problems with the current database 'MySQL' (e.g. some datatypes may 
     not be supported properly). In rare cases you might see this message because the 
     list of supported database products is incomplete (list=[derby]). If so please 
     request a java-class update via the forums.If you are using your own 
     IDataTypeFactory extending DefaultDataTypeFactory, ensure that you override 
     getValidDbProducts() to specify the supported database products.

Поэтому я думал, что добавляю это (я использую базу данных MySQL):

protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
}

Но это не помогает избежать этих предупреждений. Что здесь здесь?

Спасибо заранее и наилучшим образом относины к тиму.

Это было полезно?

Решение

Я решил это с информацией от dbunit Вопросы-Ответы. Отказ Просто установка типового свойства типа Фабрика сделала предупреждение.

    Connection dbConn = template.getDataSource().getConnection();

    IDatabaseConnection connection = new DatabaseConnection(dbConn, "UTEST", false);

    DatabaseConfig dbConfig = connection.getConfig();

    // added this line to get rid of the warning
    dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new OracleDataTypeFactory());

Другие советы

С участием Весенний ботинок Вы можете использовать такой боб конфигурации

@Configuration
public class DbUnitConfiguration {

@Autowired
private DataSource dataSource;

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

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

Я знаю, что это старая нить, но все ответы здесь сложнее, чем они должны быть.

Самый простой способ выполнить установку завода на каждое привлечение соединения поставка ан OperationListener и внедрить его connectionRetrieved Способ сделать то, что вы хотите. Не требуется переопределения; Слушатель будет вызван каждый раз IDatabaseConnection приобретается.

Я использовал драйвер JTDS и MS SQL 2008. В моем классе Dbuntitest переопределяют следующий метод. Сообщение о возинге исчезло.

@Override
protected void setUpDatabaseConfig(DatabaseConfig config) {
    config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MsSqlDataTypeFactory());
}

@ Ответ RovSembler - это место. Просто добавить, что я проверяю на разных продуктах базы данных, поэтому теперь я установил фабрику DataType в соответствии с текущим соединением:

private IDatabaseConnection getConnection(Connection jdbcConnection) throws Exception {
    String databaseProductName = jdbcConnection.getMetaData().getDatabaseProductName();

    DatabaseConnection databaseConnection = new DatabaseConnection(jdbcConnection);
    DatabaseConfig dbConfig = databaseConnection.getConfig();

    switch (databaseProductName) {
    case "HSQL Database Engine":
        dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
        break;
    case "MySQL":
        dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());
        break;
    default:
        log.warn("No matching database product found when setting DBUnit DATATYPE_FACTORY");
    }

    return databaseConnection; 
}

Вы можете, очевидно, добавить любые дополнительные базы данных в этот список.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top