'java.lang.IllegalStateException: Unable to detect database type for Sybase datasource

I am getting the Unable to detect database type for Sybase Datasource configured in my spring boot application.

Spring boot version: 1.5.3

application.properties

spring.datasource.url=jdbc:jtds:sybase://db-server-name:5555/DBNAME
spring.datasource.username=db_user
spring.datasource.password=db_password
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver

spring.jpa.database=sybase
spring.jpa.database-platform=org.hibernate.dialect.SybaseDialect

Debug Information:

// line number 75 in AbstractDatabaseInitializer class
String productName = JdbcUtils.commonDatabaseName(JdbcUtils
                    .extractDatabaseMetaData(this.dataSource, "getDatabaseProductName")
                    .toString());
// productName is returned as Sybase from JdbcUtils.extractDatabaseMetaData
DatabaseDriver databaseDriver = DatabaseDriver.fromProductName(productName);
// but there is no databaseDriver found and is returned as UNKNOWN. 
// There is no Sybase database configured in DatabaseDriver enum

There is no Sybase datasource configured in DatabaseDriver enum. Can you quickly help to fix this issue ?

Error Stack Trace for reference:

Caused by: java.lang.IllegalStateException: Unable to detect database type
        at org.springframework.boot.autoconfigure.AbstractDatabaseInitializer.getDatabaseName(AbstractDatabaseInitializer.java:80)
        at org.springframework.boot.autoconfigure.batch.BatchDatabaseInitializer.getDatabaseName(BatchDatabaseInitializer.java:54)
        at org.springframework.boot.autoconfigure.AbstractDatabaseInitializer.initialize(AbstractDatabaseInitializer.java:61)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
        ... 17 common frames omitted


Solution 1:[1]

It works for me. Just put this property in application.properties file. I was facing issue with mysql so I passed mysql here if you are using some other database just pass that(for example: schema-sybase.sql)

spring.batch.schema=classpath:org/springframework/batch/core/schema-mysql.sql

It looks like our detection algorithm is broken with MySQL so I've created this issue to double check it.

In the meantime, please specify the path to your initalization script, this will prevent Spring Boot to attempt to auto-detect it.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1