使用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.<init>(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