Nacos程序连接MySQL8.0+ NullPointerException

1、报错问题:Nacos改用MySQL存储后,启动Nacos服务出现报错

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2330)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at JDBC.Demo.main(Demo.java:15)
Caused by: java.lang.NullPointerException
    at com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:2997)
    at com.mysql.jdbc.MysqlIO.sendConnectionAttributes(MysqlIO.java:1934)
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1863)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1226)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2253)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
    ... 13 more

2、报错原因: mysql-connector-java mysql的Java驱动需要更新到8.0+

3、解决方案

  1. 在Pom中换到8.0+即可解决问题
        <!-- mysql数据库驱动包 -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.21</version>
        </dependency>
  2. 改用低版本,如5.7+,注意Nacos支持5.65版本以上的MySQL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,我会回答您的问题。请注意,所有的答案都是根据开发经验和能力的推测,而不是根据具体指令。 关于容器nacos的配置,我们可以先启动一个nacos的Docker容器,使用以下命令: ``` docker run -d -p 8848:8848 -e JVM_XMS=512m -e JVM_XMX=512m nacos/nacos-server ``` 这将启动一个端口为8848的nacos容器,并设置JVM的XMS和XMX值来限制内存的使用。 接下来,我们需要考虑如何配置nacosnacos的配置文件存储在容器内的`/home/nacos/data`目录下,我们可以通过将配置文件放在主机上的`/mydata/nacos`目录中来映射配置文件,使用以下命令: ``` docker run -d -p 8848:8848 -v /mydata/nacos:/home/nacos/data -e JVM_XMS=512m -e JVM_XMX=512m nacos/nacos-server ``` 这会在容器中将`/home/nacos/data`目录映射到主机上的`/mydata/nacos`目录。在主机上,我们可以修改目录中的配置文件,然后容器中的nacos将自动读取这些更改。 关于容器mysql8.0的配置,我们可以使用以下命令启动一个mysql容器: ``` docker run --name some-mysql -v /my/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0 ``` 这会启动一个mysql容器,并将主机上的`/my/data`目录映射到容器中的`/var/lib/mysql`目录,使得mysql数据持久化。此外,我们还指定了根密码为`my-secret-pw`。 在容器中,我们可以使用mysql的配置文件进行更深入的配置。我们可以映射配置文件,以便在容器中使用自定义的配置。 希望这能回答您的问题,请告诉我是否还有其他问题需要帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值