远程 Spring 启动应用程序仍然连接到我的本地 mysql
Posted
技术标签:
【中文标题】远程 Spring 启动应用程序仍然连接到我的本地 mysql【英文标题】:Remote Spring boot app still connect to my local mysql 【发布时间】:2018-01-14 21:53:42 【问题描述】:我使用 Angular 4、Spring boot 和 mysql。在本地,一切正常。我尝试在远程服务器 Centos 7 上进行部署。除了当我访问我的网站时,它从我的本地数据库中获取数据,而不是从位于远程服务器上的 mysql 数据库中获取数据。
我在另一台电脑上试过,结果一样,都是从本地电脑取数据!
这是我的 Spring boot 的 application.properties 文件:
server.port = 8081
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?autoReconnect=true&useSSL=false
spring.datasource.username=username
spring.datasource.password=password
netstat -tln
在远程服务器上(仅有用的字段):
Proto Recv-Q Send-Q local address remote address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::8081 :::* LISTEN
Mysql 数据库具有完全相同的结构,以及相同的用户名/密码。
-- 更新--
感谢您的建议,我终于解决了这个问题。它来自 Angular 和 Spring 之间的连接,而不是来自 Spring 和 Mysql。
一个 Springboot 实例正在我的本地计算机上运行,远程 Angular 已连接到它。在Angular的配置文件中,我将apiUrl=localhost:8081
替换为apiUrl=<my remote IP>:8081
,再次部署,我向所有人开放了8081端口(Springboot的端口),现在它运行良好。
但老实说,我不喜欢这种方法,因为我的 Springboot 应用程序可供所有人访问,而它只能由 Angular 应用程序访问。如果有人有解决方案,这个问题仍然悬而未决。谢谢
【问题讨论】:
您正在告诉您的 jdbc 驱动程序通过数据源 url 连接到localhost
。所以连接到 localhost 正是它要做的。为什么它应该做其他事情?
应用部署在远程服务器上,所以本地主机是远程服务器,不是我自己的设备
如果您的本地机器没有被引用(通过 ip 或主机名),您是否检查过您的代码?在这一点上可能是一切。
不,如果是这样的话,当我在新计算机上尝试时,它应该从我以前的设备中获取数据,但它从新计算机中获取数据..(一个mysql数据库与新的compteur也建立了相同的结构)
你在使用 Spring 的 profile
支持吗?您是否有可能在远程环境中使用不同的spring.profiles.active
启动应用程序,以便它从不同的properties
文件中读取?但是,它确实似乎高度怀疑远程服务器会从您的开发机器上安装的数据库中读取,特别是如果您使用localhost
这似乎几乎是不可能的......您如何确定它正在从您的本地数据库?
【参考方案1】:
在不确定的情况下,我认为您需要将数据源 url 指向远程位置。示例:
database.url=jdbc:mysql://192.168.0.166:3306/yourSchema?characterEncoding\=UTF-8
database.username=username
database.password=password
database.driverClassName=com.mysql.jdbc.Driver
【讨论】:
不行,问题还在。。而且我认为可以用localhost而不是IP访问本地mysql,避免向所有人开放mysql端口【参考方案2】:由于密码错误 - mysql 报错密码,显示连接本地 IP 错误,请检查您的密码两次
【讨论】:
以上是关于远程 Spring 启动应用程序仍然连接到我的本地 mysql的主要内容,如果未能解决你的问题,请参考以下文章
通过 Jumpbox/Proxy 从我的本地机器连接到远程 MySQL
无法将本地 WordPress 连接到远程 MySQL 服务器
仍然可以使用 Java Mission Control 连接到远程 JMX 但证书已过期?