遇到的问题:
一个新项目,由于需要远程办公,连接VPN后使用navicat等数据库连接工具的时候可以正常访问数据库,但启动项目时无法连接到数据库,报错信息如下:
Could not create connection to database server. Attempted reconnect 3 times. Giving up.
java.lang.IllegalStateException: Failed to execute ApplicationRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:785)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:345)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1356)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1345)
at cn.avicnet.cutter.selection.web.CutterSelectionServiceApplication.main(CutterSelectionServiceApplication.java:18)
Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
### The error may exist in cn/avicnet/cutter/selection/system/mapper/app/AreaMapper.java (best guess)
### The error may involve cn.avicnet.cutter.selection.system.mapper.app.AreaMapper.selectList
### The error occurred while executing a query
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
为了找到问题所在,就写了一个jdbc连接的测试类,结果还是连接不上,为此在网上找了很多方法,但是试过还是不行,后来请教公司大佬,说是vpn的权限问题,有IPv6和IPv4的区别,在VM这一栏加上-Djava.net.preferIPv4Stack=true就可以了
-Djava.net.preferIPv4Stack=true
是一个Java系统属性,它的作用是告诉Java虚拟机(JVM)优先使用IPv4协议栈而不是IPv6。当设置为这个属性时,应用程序将强制在IPv4协议栈上运行。这个选项可以解决一些与IPv6相关的网络问题,特别是在IPv6配置不正确或受限的环境中,它可以帮助应用程序绕过IPv6相关的问题,从而正常建立连接
具体解决方法:
我使用的是2022.3.2版本的idea,我们先点击Edit Configurations
此时找不到VM options,我们需要点击Modify options
之后再选择add VM options,具体操作如下图
将我们需要修改的属性,即 -Djava.net.preferIPv4Stack=true加入到VM这一栏即可
重新启动idea,启动项目就能正常启动了
补充一 :VPN环境下idea自带Database连接工具连接数据库
Advanced栏下,在VM options下填入 -Djava.net.preferIPv4Stack=true 即可
补充二 :jar包启动如何添加 -Djava.net.preferIPv4Stack=true 命令
启动命令增加 -Djava.net.preferIPv4Stack=true
nohup java -Djava.net.preferIPv4Stack=true -jar jar包 &