DBUNIT - Предупреждение: ABTURETALLEMETADATA
Вопрос
Я использую 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;
}
Вы можете, очевидно, добавить любые дополнительные базы данных в этот список.