对无法连接到 MySQL 的 Spring Boot 应用程序进行故障排除
Posted
技术标签:
【中文标题】对无法连接到 MySQL 的 Spring Boot 应用程序进行故障排除【英文标题】:Troubleshooting Spring Boot app that won't connect to MySQL 【发布时间】:2017-05-06 17:42:30 【问题描述】:我在应用程序中构建了 mysql 连接器和数据库详细信息,但在 Tomcat 中运行时它仍然无法连接到 MySQL。我的应用完全开源,所有源代码都在网上:https://github.com/clickcell/AutomationStatisticsPortal
The application.class
The gradle build file
application.properties 文件,与我的存储库不同,是:
spring.datasource.url=jdbc:mysql://localhost/springboot
spring.datasource.username=newuser
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
我尝试设置 MySQL 5.5 服务器以匹配 application.properties
每次症状如下:
Web 应用程序正在运行,但没有数据库连接,没有数据显示。
我使用 Tomcat8 和 MySQL 5.5。我已启用查询日志并使用tail -f
对其进行监视,当我直接向服务器运行查询时,它们会显示在日志中,但是当我在 tomcat 管理器中重新启动我的应用程序时,该日志中没有任何显示。
在 tomcat 日志中我得到以下信息:
21-Dec-2016 10:19:16.693 INFO [http-nio-8080-exec-6] org.apache.catalina.core.StandardContext.reload Reloading Context with name [/AutomationStatisticsPortal] has started
21-Dec-2016 10:19:17.339 WARNING [http-nio-8080-exec-6] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [AutomationStatisticsPortal] registered the JDBC driver [org.h2.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
21-Dec-2016 10:19:19.026 INFO [http-nio-8080-exec-6] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
21-Dec-2016 10:19:26.839 INFO [http-nio-8080-exec-6] org.apache.catalina.core.StandardContext.reload Reloading Context with name [/AutomationStatisticsPortal] is completed
看起来它注册了错误类型的数据库驱动程序,但我不知道为什么给定我的配置。
【问题讨论】:
您是否遇到了一些错误?异常和堆栈跟踪会很有帮助。 没有堆栈跟踪,我查看了tomcat8-stderr.*
,但在我的编辑中确实找到了一些有用的消息。
“没有数据显示”是什么意思。哪里没有数据显示?
感谢@ChristopherSchultz,我有this bootstrap class 将初始数据加载到数据库中,然后当我加载页面时它应该显示在浏览器中。它没有进入数据库,所以我的网站只显示带有样式且没有数据的空白页面。这是与 H2 数据库一起开发的,所以我知道页面在生产中工作时会是什么样子。
【参考方案1】:
您显示的日志是使用H2时产生的。
我克隆了您的存储库并在本地进行了测试,当我使用 MySQL 参数更新 src/main/resources/application.properties
时它可以工作。
您应该删除根目录中的另一个,它是模棱两可的。
您也可以将src/main/resources
中的application.properties
文件替换为application.yml
文件:
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://localhost/springboot
username: newuser
password: password
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
database: MYSQL
show-sql: true
在这种情况下,添加 Hikary 依赖项,或使用其他数据源类型。
【讨论】:
谢谢,我尝试进行更改,但应用程序无法在 tomcat 中启动,我收到错误At least one JAR was scanned for TLDs yet contained no TLDs.
这是一个INFO,你可以忽略它。如果要使用 Hikary 版本,请确保包含依赖项:mvnrepository.com/artifact/com.zaxxer/HikariCP/2.5.1。但是您可以坚持使用默认值。如果您授予对 pblanchardie 的写入权限,我可以将 application.properties 推送到 GitHub。
我添加了依赖项,现在我可以确认查询正在到达 MySQL 服务器,但我看到它们被回滚,并且我的应用程序无法启动。我不断收到此错误:SEVERE [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive AutomationStatisticsPortal.war java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/AutomationStatisticsPortal]]
@clickcell 您需要查看其他日志文件以找出您的应用程序无法启动的原因。这不会进入catalina.out
。
管理器日志中堆栈跟踪的底部有Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'springboot.record_type' doesn't exist
以上是关于对无法连接到 MySQL 的 Spring Boot 应用程序进行故障排除的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot + MySQL + Docker Compose - 无法使 Spring Boot 连接到 MySQL
无法使用 JDBC 和 Spring 连接到 MySQL [重复]
Spring boot JDBC无法连接到docker容器中的mysql
Spring Boot无法连接到同一网络的docker中的mysql