【问题标题】:Error while changing the driver from JTDS to MS SQL Driver将驱动程序从 JTDS 更改为 MS SQL 驱动程序时出错
【发布时间】:2013-10-24 15:48:29
【问题描述】:

我在尝试从 JTDS 切换到 MS SQL 驱动程序时遇到错误。以下是错误详情:

t.ContextLoader: Root WebApplicationContext: initialization started
licationContext: Refreshing Root WebApplicationContext: startup date [Wed Oct 16 18:42:50 IST 2013]; root of context hierarchy
efinitionReader: Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml]
efinitionReader: Loading XML bean definitions from ServletContext resource [/WEB-INF/datasource.xml]
efinitionReader: Loading XML bean definitions from ServletContext resource [/WEB-INF/services.xml]
ableBeanFactory: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@437b73e8: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,txManager,hibernateTemplate,sessionFactory,dataSource,caseDAO,clientDAO,billableItemDAO,statusDAO,insuranceDAO,patientDAO,userDAO,reportDAO,utilDAO,edexDAO,logDAO,faxHistoryDAO,lookupService,persistenceService,adminService,reportService]; root of factory hierarchy
ableBeanFactory: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@437b73e8: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,txManager,hibernateTemplate,sessionFactory,dataSource,caseDAO,clientDAO,billableItemDAO,statusDAO,insuranceDAO,patientDAO,userDAO,reportDAO,utilDAO,edexDAO,logDAO,faxHistoryDAO,lookupService,persistenceService,adminService,reportService]; root of factory hierarchy
t.ContextLoader: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'txManager' defined in ServletContext resource [/WEB-INF/datasource.xml]: Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/datasource.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 [net.sourceforge.jtds.jdbc.Driver]
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1325)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1653)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/datasource.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 [net.sourceforge.jtds.jdbc.Driver]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1361)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1086)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
    ... 29 more
Caused by: 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 [net.sourceforge.jtds.jdbc.Driver]
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102)
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358)
    ... 37 more

hibernate.cfg.xml内容如下:

<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=PUC</property>
        <property name="connection.username">admin</property>
        <property name="connection.password">admin</property>


        <property name="hibernate.jdbc.batch_size">10</property> 
        <!-- configuration pool via c3p0--> 
        <property name="c3p0.acquire_increment">1</property>
        <property name="c3p0.max_size">5</property> 
        <property name="c3p0.max_statements">0</property> 
        <property name="c3p0.min_size">3</property> 
        <property name="c3p0.timeout">20</property> <!-- seconds -->
        <property name="c3p0.idle_test_period">60</property> <!-- seconds --> 

        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
        <!-- for debug purposes set show_sql property true -->
        <property name="show_sql">false</property>
        <property name="format_sql">true</property>
        <property name="use_sql_comments">true</property>
        <property name="generate_statistics">true</property>
        <property name="hibernate.connection.provider_class">com.app.dao.C3P0ConnectionProvider</property>

请帮助我解决此错误。

提前致谢。

【问题讨论】:

  • 您能分享一下您与数据源定义相关的 Spring 框架配置吗?
  • 您为什么要放弃 jTDS?以我的经验,它在大多数方面都优于 MS 提供的驱动程序。

标签: java hibernate jakarta-ee jdbc spring-jdbc


【解决方案1】:

抱歉,我误解了您的问题。您需要 SQL Server 驱动程序。

Tomcat 会要求您将它放在它的 /lib 文件夹中。 JBOSS 会让你把它放在它的 server/default/lib 文件夹中。您使用的是哪个 Java EE 应用服务器,您将 JAR 放在哪里?

可能不应该在您的 WEB-INF/lib 中。

该错误表明还有另一个 .properties 文件尚未更改。

我强烈建议您创建应用程序用户名和密码,并仅授予完成任务所需的权限,而不是使用 admin/admin。您的应用不需要那么多访问权限。

【讨论】:

  • 我已经在 hibernate.cfg.xml 中把 jtds 驱动改成了 ms sql 驱动,仍然在寻找 jtds 驱动。
  • 那么,您还有另一个文件仍在调用 jTDS 驱动程序。也许是 Spring 为数据源加载的 .properties 文件。
猜你喜欢
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 2013-08-12
  • 2017-01-09
  • 1970-01-01
  • 2012-07-21
相关资源
最近更新 更多