SpringBoot 连接 OceanBase 数据库示例程序报错连接被拒绝

使用OceanBase官方的:SpringBoot 连接 OceanBase 数据库示例

1. 解释一:

jdbc:oceanbase://host:port/schema_name?user=$user_name&password=$password&useSSL=false&useUnicode=true&characterEncoding=utf-8

参数说明:

  • host:提供 OceanBase 数据库连接 IP。ODP 连接方式使用的是一个 ODP 地址;直连方式使用的是 OBServer 节点的 IP 地址。

  • port:提供 OceanBase 数据库连接端口。ODP 连接的方式默认是 2883,在部署 ODP 时可自定义;直连方式默认是 2881,在部署 OceanBase 数据库时可自定义。

  • schema_name:需要访问的 Schema 名称。(即数据库名称,使用默认test即可)

  • user_name:提供租户的连接账户。ODP 连接方式的常用格式有两种:用户名@租户名#集群名 或者 集群名:租户名:用户名;直连方式格式:用户名@租户名。

  • password:提供账户密码。

  • useSSL=false&useUnicode=true&characterEncoding=utf-8:为额外的连接属性。

  • useSSL:强制连接时是否使用 SSL/TLS。 默认值:false。

  • useUnicode:指定字符的编码、解码格式。 默认值:true。

  • characterEncoding:支持数据库 URL 选项的字符编码。默认值:utf8。

  • socketTimeout:定义了网络 Socket 超时(SO_TIMEOUT),以毫秒为单位。值为 0 时将禁用此超时。

2. 解释二:

修改 java-oceanbase-springboot 项目中的数据库连接信息

示例如下:

  • 数据库驱动的名称为:com.oceanbase.jdbc.Driver
  • OBServer 节点的 IP 地址为 10.10.10.1。
  • 访问端口使用的是 2881。
  • 需要访问的 Schema 名称为 sys。(即数据库名称,使用默认test即可)
  • 租户的连接账户是 sys@xyoracle。xyoracle 是在 OceanBase 数据库中创建的一个 Oracle 模式的用户租户,sys 是租户 xyoracle 的用户名称。
  • 密码是 ******。

示例代码如下:

spring.datasource.driverClassName=com.oceanbase.jdbc.Driver
spring.datasource.url=jdbc:oceanbase://10.10.10.1:2881/sys?useSSL=false&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=sys@xyoracle
spring.datasource.password=******

3. 报错信息

java.sql.SQLSyntaxErrorException: Could not connect to xx.xx.xx.xx:xxxx: (conn=250006) Access denied for user 'root@xxx'@'xx.xx.xx.xx' (using password: YES)
	at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:110) ~[oceanbase-client-2.4.3.jar:na]
	at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:235) ~[oceanbase-client-2.4.3.jar:na]
	at com.oceanbase.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1644) ~[oceanbase-client-2.4.3.jar:na]
	at com.oceanbase.jdbc.internal.util.Utils.retrieveProxy(Utils.java:1427) ~[oceanbase-client-2.4.3.jar:na]
	at com.oceanbase.jdbc.OceanBaseConnection.newConnection(OceanBaseConnection.java:306) ~[oceanbase-client-2.4.3.jar:na]
	at com.oceanbase.jdbc.Driver.connect(Driver.java:89) ~[oceanbase-client-2.4.3.jar:na]
	at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-4.0.3.jar:na]
	at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364) ~[HikariCP-4.0.3.jar:na]
	at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-4.0.3.jar:na]
	at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476) ~[HikariCP-4.0.3.jar:na]
	at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) ~[HikariCP-4.0.3.jar:na]
	at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:115) ~[HikariCP-4.0.3.jar:na]
	at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-4.0.3.jar:na]
	at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:159) ~[spring-jdbc-5.3.27.jar:5.3.27]
	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:117) ~[spring-jdbc-5.3.27.jar:5.3.27]
	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80) ~[spring-jdbc-5.3.27.jar:5.3.27]
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:376) ~[spring-jdbc-5.3.27.jar:5.3.27]
	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:431) ~[spring-jdbc-5.3.27.jar:5.3.27]
	at com.oceanbase.testspringboot.TestSpringbootApplicationTests.contextLoads(TestSpringbootApplicationTests.java:23) ~[test-classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]

4. 解决办法

#  使用用户名@租户吗#集群名的方式,不要直接使用用户名@租户名的方式
spring.datasource.username=sys@xyoracle#xxx

你可能感兴趣的:(oceanbase,数据库,spring,boot,oceanbase)