CT后记,今天在项目开发的过程中遇到这样一个问题,就是在navicat连接数据库后,jdbc出现了 Application run failed
的问题。(前一天还好好的,第二天出现问题)错误来的莫名其妙,而且发现很多之前没发现的盲点,只不过重启确实是个好办法,但是特殊环境下不方便重启电脑,接下来我慢慢展开。
然后启动redis后,又出现如下问题。
原因是:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
(未能配置DataSource:未指定“url”属性,并且无法配置任何嵌入的数据源。)
这个报错出现原因是引入的spring-boot-starter-jdbc但是没有配置spring.datasource.url等信息报错的。我这个项目报这些错的原因来的莫名其妙,一开始测试了下数据库的原因,结果也不是,最后就用备份项目reconsitution了 。
正常来说遇到这种报错情况要检查jdbc的配置信息是否有错误。相关报错解决的方法这里就不赘述了,详细的方法可以自行百度和查资料。
推荐文章:http://www.manongjc.com/article/34469.html
关于为什么出现 1045 - Access denied for user 'root @localhost' (using password: YES)
这个错误,我是这样弄出来的。
首先新建一个连接,然后编辑连接(右键绿色这个连接然后选择编辑连接),然后我修改了password(之所以修改password是因为在解决上述错误时做的一些测试),然后再次连接这个数据库的时候出现1045错误(前提是我密码还是修改成之前一样的密码)。
然后开始跑springboot的application看是否出现报错,然后出现如下的报错情况以及Navicat的1045报错,首先这里有个前提是datasource配置的密码和Navicat连接的密码是一致的。
报错信息:
datasource error
url:jdbc:mysql://localhost:3306/shang_yiuseUnicode=true&characterEncoding=gbk&serverTimezone=GMT&useSSL=false
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
报错截图:
其实会出现上面这些大大小小的问题,我觉得很奇怪,首先idea编译器要管理员身份运行,要不然跑项目全是拒绝访问!?然后检查生产环境的配置,配置好redis的端口号、password,还有jdbc的基础配置,如ip、用户名、password等等。我这里默认情况下都是用127.0.0.1:3306这个ip和端口号,然后跑项目,但是项目很奇怪的出现了jdbc数据库连接失败的问题,然后去检查Navicat数据库连接的情况,发现配置都是正确的。
然后我对数据库进行修改,进行排错,编辑连接、修改密码后(密码还是改成之前的密码),这个连接就出现了1045的报错了,紧接着删掉这个报错的连接,然后重新配置一个新的连接,但是springboot项目运行也还是报错datasource error和1045。对于这种情况,我在尝试了修改生成环境配置和数据库连接配置后,还是没有解决,我是想着重启然后重新跑项目和相关jar包,但是前面我也说过,我在特殊开发环境下运行,不能随便重启电脑。
一些解决方案:
1️⃣因为我在特殊开发环境下运行,不能随便重启电脑。所以我先把把MySQL的服务重启,重新打开Navicat连接数据库,然后开启redis服务,然后用之前备份的项目reconsitution了,检查和修改所需要配置的生成环境,然后再重新运行springboot项目,上述的错误全部都没有出现了…
2️⃣然后说说正常情况下怎么处理这些报错,首先1045错误出现的原因可能是:
用户名或密码错误:请确保您输入的用户名和密码与 MySQL 数据库中的正确匹配,并且区分大小写。
主机地址错误:如果您配置了特定的主机地址,则必须确保输入的主机地址正确。否则,Navicat 将无法连接到数据库。
防火墙阻止连接:您的计算机防火墙或网络防火墙可能会阻止 Navicat 连接到 MySQL 数据库。请检查并确认您的防火墙设置,以确保 Navicat 允许连接到目标数据库。(这种情况连接开始前,系统一般都会弹出来,我们要选择允许)
针对以上问题,我们可以尝试以下操作:
检查用户名和密码是否正确,注意大小写。
检查主机地址是否正确,并且确保 MySQL 正在运行。
禁用计算机防火墙或网络防火墙,或者添加一个允许 Navicat 连接 MySQL 的规则。
然后看看jdbc的报错,跟1045报错是有联系的,终究还是数据库的问题,所以我们要检查清楚生成环境中datasource的配置。针对报错,可以从以下方向进行排错:
检查连接数据库的ip和端口是否正确,并确保目标数据库服务器能够被访问。
确认使用的数据库账户和密码是否正确,并拥有足够的权限。
确认在url中填写的数据库名称是否正确。
尝试更新至最新版本的JDBC驱动程序。
查看应用程序日志,了解具体错误原因,然后根据错误信息进行修复。
如果仍然无法解决问题,可以采用一些第三方库来连接数据库,比如MyBatis、Hibernate等。
上述的解决方案还是有点模糊的,接下来简单讲讲一些详细操作(虽然我的那个项目配置好这些还是报错了,但是我的报错不源于这些):
com.mysql.jdbc.Driver
更新为com.mysql.cj.jdbc.Driver
。useSSL=false
。serverTimezone=GMT%2B8
(GMT%2B8代表东八区)否则会报关于时区的错。一个较为具体的配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:/localhost:3306/mysql?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=yourpassword
对于出现这些报错以及无奈的解决过程,我感到很无言和束手无策,对于正常情况的开发中遇到这种情况还是可以走正常的解决方法的,出现1045报错和datasource报错的情况终究还是数据库的问题和jdbc的一些配置问题,具体问题还是具体分析吧,针对特殊情况的特殊问题,我们还是要想到对应的应急方案,比如说项目备份和定期review等等操作。