最近搭建了一个Spring MVC
项目,配置完数据库连接,运行时一直报错:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 警告: com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1316264 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: com.microsoft.sqlserver.jdbc.SQLServerException: 用户 'wenjianbao' 登录失败。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196) at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246) at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83) at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2532) at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1929) at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41) at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1917) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1061) at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:833) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:716) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841) at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134) |
数据库配置如下:
(1) 文件 spring-mybatis.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | < context:property-placeholder location = "classpath:/db.properties" /> < bean id = "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method = "close" p:driverClass = "${driver}" p:jdbcUrl = "${url}" p:user = "${username}" p:password = "${password}" p:idleConnectionTestPeriod = "${idleConnectionTestPeriod}" p:maxIdleTime = "${maxIdleTime}" p:acquireIncrement = "${acquireIncrement}" p:initialPoolSize = "${initialPoolSize}" p:maxPoolSize = "${maxPoolSize}" p:minPoolSize = "${minPoolSize}" p:autoCommitOnClose = "${autoCommitOnClose}" p:checkoutTimeout = "${checkoutTimeout}" p:acquireRetryAttempts = "${acquireRetryAttempts}" p:preferredTestQuery = "SELECT 1" p:maxConnectionAge = "3000" /> |
(2) 文件 db.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql: //localhost :3306 /java_web ?serverTimezone=Asia /Shanghai &useUnicode= true &characterEncoding=utf8&useSSL= false username=root password=123456 idleConnectionTestPeriod=60 maxIdleTime=240 acquireIncrement=5 initialPoolSize=10 maxPoolSize=30 minPoolSize=10 autoCommitOnClose= false checkoutTimeout=1000 acquireRetryAttempts=2 |
检查了半天,读取配置没问题,数据库配置也没问题。最后看到一篇博客说是${}取值的问题,觉得可能是这个问题,于是把数据库配置改成如下:
(1) 文件 spring-mybatis.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | < context:property-placeholder location = "classpath:/db.properties" /> < bean id = "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method = "close" p:driverClass = "${db_driver}" p:jdbcUrl = "${db_url}" p:user = "${db_username}" p:password = "${db_password}" p:idleConnectionTestPeriod = "${db_idleConnectionTestPeriod}" p:maxIdleTime = "${db_maxIdleTime}" p:acquireIncrement = "${db_acquireIncrement}" p:initialPoolSize = "${db_initialPoolSize}" p:maxPoolSize = "${db_maxPoolSize}" p:minPoolSize = "${db_minPoolSize}" p:autoCommitOnClose = "${db_autoCommitOnClose}" p:checkoutTimeout = "${db_checkoutTimeout}" p:acquireRetryAttempts = "${db_acquireRetryAttempts}" p:preferredTestQuery = "SELECT 1" p:maxConnectionAge = "3000" /> |
(2) 文件 db.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | db_driver=com.mysql.cj.jdbc.Driver db_url=jdbc:mysql://localhost:3306/java_web?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&useSSL=false db_username=root db_password=123456 db_idleConnectionTestPeriod=60 db_maxIdleTime=240 db_acquireIncrement=5 db_initialPoolSize=10 db_maxPoolSize=30 db_minPoolSize=10 db_autoCommitOnClose=false db_checkoutTimeout=1000 db_acquireRetryAttempts=2 |
然后,数据连接成功了。
问题原因:
变量名有冲突,重名了,加个前置(如:db_)保证其唯一性 即可!
参考:https://blog.csdn.net/qq_21134557/article/details/81004205
延伸阅读: