SpringBoot中连接oracle出现告警信息

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 前几日领导说需要连接友商的Oracle,然后读取友商的数据展示到页面来。工作还是需要做的嘛,虽然比较简单些,但是工作量还是有的(此处划水摸鱼了呢?)。为了演示连接成功和可以读取数据,我在本地搭建了一个Oracle,然后作为测试来模拟读取,后续只需要替换下连接器的连接即可。然后,在启动SpringBoot项目时,有一个很显眼的WARN红色字体在控制台打印出来了。


问题出现的背景和原因

前几日领导说需要连接友商的Oracle,然后读取友商的数据展示到页面来。工作还是需要做的嘛,虽然比较简单些,但是工作量还是有的(此处划水摸鱼了呢?)。为了演示连接成功和可以读取数据,我在本地搭建了一个Oracle,然后作为测试来模拟读取,后续只需要替换下连接器的连接即可。然后,在启动SpringBoot项目时,有一个很显眼的WARN红色字体在控制台打印出来了。

WARN com.alibaba.druid.pool.DruidAbstractDataSource - oracle.jdbc.driver.OracleDriver is deprecated.Having use oracle.jdbc.OracleDriver


当前我Oracle服务器的数据库版本为:11.2g ,此处画上一个重点,后续要考。


根据问题着手处理

虽然这个不影响项目的运行,但是出于看着不舒服的情况,我还是决定看看这个告警出现的问题。仔细一看,这个问题还是比较简单的。我找百度翻译给翻译下吧。

看出来了吧,是不是已经知道什么问题了?大白话就是在使用驱动连接器的类过期了,不在使用oracle.jdbc.driver.OracleDriver 这个驱动器类了,而是改为了oracle.jdbc.OracleDriver。相比以前好像是简洁了一个单词,少了一个也是一种进步,一种优化。看来我是很久都不用了。


思考的路永远欢迎你踏上去

为了增加我猜测的准确性,我决定还是百度下吧,下面看下官方提供的解释,我认为这个应该是比较准确了。

官方解释:

Package oracle.jdbc


Beginning in Oracle9i, the Oracle extensions to JDBC are captured in the packageoracle.jdbc. This package contains classes and interfaces that specify the Oracle extensions in a manner similar to the way the classes and interfaces injava.sqlspecify the public JDBC API.


Your code should use the packageoracle.jdbcinstead of the packageoracle.jdbc.driverused in earlier versions of Oracle. Use of the packageoracle.jdbc.driveris now deprecated, but will continue to be supported for backwards compatibility.


All that is required to covert your code is to replace "oracle.jdbc.driver" with "oracle.jdbc" in the source and recompile. This cannot be done piece-wise. You must convert all classes and interfaces that are referenced by an application. Conversion is not required, but is highly recommended. Future releases of Oracle may have features that are incompatible with use of the packageoracle.jdbc.driver.


The purpose of this change is to enable the Oracle JDBC drivers to have multiple implementations. In all releases up to and including Oracle9i, all of the Oracle JDBC drivers have used the same top level implementation classes, the classes in the packageoracle.jdbc.driver. By converting your code to useoracle.jdbc, you will be able to take advantage of future enhancements that use different implementation classes. There are no such enhancements in Oracle9i, but there are plans for such enhancements in the future.


Additionally, these interfaces permit the use of some code patterns that are difficult to use when your code uses the packageoracle.jdbc.driver. For example, you can more easily develop wrapper classes for the Oracle JDBC classes. If you wished to wrap theOracleStatementclass in order to log all SQL statements, you could easily do so by creating a class that wrapsOracleStatement. That class would implement the interfaceoracle.jdbc.OracleStatementand hold anoracle.jdbc.OracleStatementas an instance variable. This wrapping pattern is much more difficult when your code uses the packageoracle.jdbc.driveras you cannot extend the classoracle.jdbc.driver.OracleStatement.


Once again, your code should use the new packageoracle.jdbcinstead of the packageoracle.jdbc.driver. Conversion is not required asoracle.jdbc.driverwill continue to be supported for backwards compatibility. Conversion is highly recommended as there may in later releases be features that are not supported if your code usesoracle.jdbc.driver.

Since:

9i

See Also:

java.sql

这篇文章的地址来源于:https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/package-summary.html 有兴趣的小伙伴可以阅读,可以提升下下英文阅读能力。


综合上述可见,从oracle9i开始,使用oracle.jdbc.OracleDriver代替oracle.jdbc.driver.OracleDriver。如果继续使用oracle.jdbc.driver.OracleDriver,在后续可能出现不支持某些功能。oracle.jdbc.OracleDriver 继承oracle.jdbc.driver.OracleDriver,是为了与老版本兼容,这也就可以说明我这里出现问题的原因了。


解决办法多数情况是一种取舍

先看下我原来的在YML中配置multi-card-oracle的驱动信息

省略……
      datasource:        master:          url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/jmd-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
          username: xxxxxx
          password: xxxxxxxxxx
          driver-class-name: com.mysql.cj.jdbc.Driver
# 多数据源配置        multi-card-oracle:          url: jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:xxxxxxx
          username: xxxxxx
          password: xxxxxxxxxx
          driver-class-name: oracle.jdbc.driver.OracleDriver
省略……

oracle.jdbc.driver.OracleDriver替换为oracle.jdbc.OracleDriver就可以了消除上面的告警信息了。


关于Oracle的工具连接使用的驱动器类

说到这里,其实还有一种方式可以避免这种问题的出现。我们在使用工具连接数据库服务器的时候,填写完成必要信息后,选择数据库类型,此时,工具会根据你的数据库服务器的版本来选择最优的驱动连接器,此时的驱动器连接器的类名称便是你需要的连接驱动器类。


关于MySQL的驱动器类

想到这里,其实,这个同我们在使用MySQL时是一样的道理。例如,我们在使用MySQL时,使用的驱动器为com.mysql.cj.jdbc.Driver,则代表我们连接的数据库服务器的版本为8.0+,如果是com.mysql.jdbc.Driver则是8.0以下的MySQL版本。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
1月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
670 10
|
6月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
94 0
|
2月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
772 1
|
5月前
|
Oracle 安全 关系型数据库
【Oracle】使用Navicat Premium连接Oracle数据库两种方法
以上就是两种使用Navicat Premium连接Oracle数据库的方法介绍,希望对你有所帮助!
1154 28
|
11月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
2608 1
|
6月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
101 0
|
8月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
312 2
|
10月前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
2236 3
|
11月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
2295 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
11月前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
272 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例

推荐镜像

更多