无法在 Spring MVC 中建立 JDBC 连接
Posted
技术标签:
【中文标题】无法在 Spring MVC 中建立 JDBC 连接【英文标题】:Could not establish JDBC connection in Spring MVC 【发布时间】:2021-02-26 02:50:58 【问题描述】:我想将我的 Spring MVC 应用程序连接到我的本地数据库,但是我收到了这个错误
Unexpected error occurred in scheduled task.: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Unable to load authentication plugin 'caching_sha2_password'.)
但是当我将它与另一台服务器上的数据库连接时,它会成功连接! 这是我的 spring-database.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg name="dataSource" ref="ds" ></constructor-arg>
</bean>
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/expense"></property>
<property name="username" value="root"></property>
<property name="password" value="shahrukh"></property>
<property name="removeAbandoned" value="true"/>
<property name="initialSize" value="20" />
<property name="maxActive" value="30" />
</bean>
<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
<bean id="securitydao" class="com.expense.DaoImpl.SecurityDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="commondao" class="com.expense.DaoImpl.CommonDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="expdao" class="com.expense.DaoImpl.ExpenseDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="actiondao" class="com.expense.DaoImpl.Level2DaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="accountdao" class="com.expense.DaoImpl.AccountDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="crondao" class="com.expense.DaoImpl.CronDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="dumpdao" class="com.expense.DaoImpl.DumpDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="pettydao" class="com.expense.DaoImpl.PettyCashDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="masterdao" class="com.expense.DaoImpl.MasterDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<bean id="escalationNotificationDao" class="com.expense.DaoImpl.EscalationNotificationDaoImpl">
<property name="template" ref="jt"></property>
</bean>
<!--=================================================Service Layer Bean============================================= -->
<bean id="securityservice" class="com.expense.ServiceImpl.SecurityServiceImpl">
</bean>
<bean id="commonservice" class="com.expense.ServiceImpl.CommonServiceImpl">
</bean>
<bean id="expservice" class="com.expense.ServiceImpl.ExpenseServiceImpl">
</bean>
<bean id="actionservice" class="com.expense.ServiceImpl.Level2ServiceImpl">
</bean>
<bean id="accountservice" class="com.expense.ServiceImpl.AccountServiceImpl">
</bean>
<bean id="uploadfile" class="com.expense.FileUpload.FileUploadService"/>
<bean id="pettyuploadfile" class="com.expense.FileUpload.FileUploadServicePettyCash"/>
<bean id="pettyservice" class="com.expense.ServiceImpl.PettyCashServiceImpl"/>
<bean id="dumpservice" class="com.expense.ServiceImpl.Dump_ServiceImpl"/>
<bean id="masterservice" class="com.expense.ServiceImpl.MasterServiceImpl"/>
<bean id="pageaccess" class="com.expense.ServiceImpl.securityaccess_Impl"/>
<bean id="escalatedNotificationService" class="com.expense.ServiceImpl.EscalationNotificationServiceImpl"/>
</beans>
我的应用程序正常工作是我连接到其他服务而不是本地主机
<property name="url" value="jdbc:mysql://10.10.1.161:3305/expense"></property>
我的环境变量设置正确,因为我可以通过 cmd 访问我的数据库,
mysql -uroot -p
请帮忙。
谢谢
【问题讨论】:
【参考方案1】:在不知道您的 MySQL 安装版本的情况下,我认为它是版本 8 安装。正在工作的数据库可能是较旧的安装,其中使用了不同的身份验证机制。
这个问题之前在这里讨论过:How to resolve Unable to load authentication plugin 'caching_sha2_password' issue
我认为最好的办法是更新您的连接器:https://dev.mysql.com/downloads/connector/j/
否则您可以查看有关如何更改标识以允许 mysql_native_password 的手册:https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
【讨论】:
谢谢,我用的是旧的 mysql 连接器,我下载了一个新的,现在可以使用了以上是关于无法在 Spring MVC 中建立 JDBC 连接的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot JDBC无法连接到docker容器中的mysql
maven初始搭建一个基础项目(spring mvc+spring+jdbc mysql+)
无法使用 JDBC 和 Spring 连接到 MySQL [重复]