I am trying to create a data source for use with the Apache camel sql component and as per the documentation I have defined the spring data source properties and included the dependencies in my pom file:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-jdbc-starter</artifactId>
</dependency>
<!-- Component dependencies-->
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-sql-starter</artifactId>
</dependency>
<!-- MS SQL jdbc driver -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.2.2.jre11</version>
</dependency>
I have even defined a configured a data source as per numerous read examples (though if I am not mistaken, this isn’t needed if the spring default datasource properties are defined):
@Configuration
public class DataSourceConfig {
@Bean(name = "etlDataSource")
@ConfigurationProperties("spring.datasource")
public DataSource getDataSource(){
return DataSourceBuilder.create().build();
}
}
So far my efforts, all result in the same error:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'etlDataSource' defined in class path resource [com/test/camel/etl/config/DataSourceConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'getDataSource' threw exception; nested exception is java.lang.IllegalStateException: No supported DataSource type found
I’d appreciate some pointers as to what I am missing.
EDIT:
My datasource properties as defined:
spring:
datasource:
password: some_passw0rd
url: jdbc:sqlserver://localhost:1433;trustServerCertificate=false;loginTimeout=30;
username: sa
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
platform: mssql
Advertisement
Answer
I solved it. I looked into the DataSourceBuilder source and saw that the build method tries to determine the type, so I specified one in the instantiation and it worked:
@Bean(name = "etlDataSource")
@ConfigurationProperties("spring.datasource")
public DataSource getDataSource(){
return DataSourceBuilder.create().type(BasicDataSource.class).build();
}