Could not load JDBC driver class - Spring Batch standalone program
Had jdbc & sqlserver transposed in the package name.
<bean id="legacyDatasource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://server:1433;DatabaseName=database" />
<property name="username" value="user" />
<property name="password" value="pw" />
</bean>
Related videos on Youtube
IceBox13
I am a senior software architect working in software development since 1999. My areas of expertise are Java and C# based technologies, web services, service integration and messaging.
Updated on May 25, 2022Comments
-
IceBox13 almost 2 years
I'm working on a Spring Batch program, running it as a command-line app (currently via STS for testing). When I run it via the Eclipse run/debug configuration via the org.springframework.batch.core.launch.support.CommandLineJobRunner, it cannot load the SQL Server JDBC driver. I'm certain I have it on the classpath, but evidently it is still having issues.
Here is my exception trace from the console log:
09:11:59.291 [main] ERROR o.s.b.c.l.s.CommandLineJobRunner - Job Terminated in error: Error creating bean with name 'legacyDatasource' defined in class path resource [META-INF/spring/module-context.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.microsoft.jdbc.sqlserver.SQLServerDriver] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'legacyDatasource' defined in class path resource [META-INF/spring/module-context.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.microsoft.jdbc.sqlserver.SQLServerDriver] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1506) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) ~[spring-context-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:290) [spring-batch-core-3.0.2.RELEASE.jar:3.0.2.RELEASE] at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:590) [spring-batch-core-3.0.2.RELEASE.jar:3.0.2.RELEASE] Caused by: org.springframework.beans.PropertyBatchUpdateException: Failed properties: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [com.microsoft.jdbc.sqlserver.SQLServerDriver] at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:121) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1502) ~[spring-beans-4.1.4.RELEASE.jar:4.1.4.RELEASE] ... 14 common frames omitted
My datasource config from the spring xml (details changed to protect the innocent of course):
<bean id="legacyDatasource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource"> <property name="driverClassName" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" /> <property name="url" value="jdbc:microsoft:sqlserver://server:1433;DatabaseName=database" /> <property name="username" value="user" /> <property name="password" value="pw" /> </bean>
Now to the classpath stuff...installed in my local maven repo:
And in my pom:
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc41</artifactId> <version>4.1</version> </dependency>
And it's in my project's Maven Dependencies:
In my run config, I've tried adding it directly to the classpath on the classpath tab, and through the VM argument.
I'm pretty sure it's something simple. Any ideas why the driver cannot be loaded? To me it's also worth noting that it's not a class not found error (though it may be under the covers and not part of this stack trace).