Spring Batch с использованием источника данных Sybase IQ

Как правильно настроить источник данных Sybase в Spring Batch?

В настоящее время я использую JdbcPagingItemReader для чтения БД и создания источника данных с помощью Tomcat DBCP. Однако при пакетном запуске возникает следующая ошибка.

Caused by: java.lang.IllegalArgumentException: DatabaseType not found for product name: [Sybase IQ]
at org.springframework.batch.support.DatabaseType.fromProductName(DatabaseType.java:77)
at org.springframework.batch.support.DatabaseType.fromMetaData(DatabaseType.java:108)
at org.springframework.batch.core.repository.support.JobRepositoryFactoryBean.afterPropertiesSet(JobRepositoryFactoryBean.java:162)
at org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer.createJobRepository(DefaultBatchConfigurer.java:82)
at org.springframework.batch.core.configuration.annotation.DefaultBatchConfigurer.initialize(DefaultBatchConfigurer.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:344)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:295)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130)
... 13 more

Для справки, в настоящее время я использую jar JConn4-7.0 для подключения. Однако нет проблем с подключением к базе данных Oracle [с измененными свойствами пула для Oracle].

Любое понимание будет полезно.

Пожалуйста, не стесняйтесь редактировать вопрос для ясности/удобочитаемости.


person ram    schedule 02.12.2013    source источник


Ответы (1)


Ошибка, которую вы получаете, вероятно, связана с тем, что явно не настроен тип базы данных в вашем JobRepositoryFactoryBean. Без его установки мы пытаемся определить, какой это тип, из метаданных JDBC. Чтобы явно указать Sybase в качестве типа базы данных вашего репозитория заданий, настройте его с помощью атрибута databaseType в JobRepositoryFactoryBean, как показано ниже:

<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="databaseType" value="SYBASE" />
</bean>

Подробнее об этой функции можно прочитать в документации Spring Batch здесь: http://docs.spring.io/spring-batch/reference/html/configureJob.html#nonStandardDatabaseTypesInRepository

person Michael Minella    schedule 03.12.2013
comment
+1. Удивлен, что не нашел его раньше, хотя искал параметр для его установки [использовал конфигурации на основе аннотаций]. Я проверю и поставлю ✓ - person ram; 03.12.2013
comment
В настоящее время я использую MapJobRepositoryFactoryBean для jobRepository; следовательно, у него нет типа базы данных [начиная с inMemory] - person ram; 03.12.2013