Apollo的Oracle适配改动

时间:2020-08-01 21:51:07   收藏:0   阅读:138

这几天工作需要使用Apollo配置中心。Apollo唯一的依赖是MySQL数据库,然而公司只有Oracle数据库资源。这里有一个Oracle适配改动的分支,但是它是基于0.8.0版本的Apollo。看着Apollo官方文档上各种特性都只有1.0.0以上版本才有,我决定基于当前最新版本(1.2.0)自己改一波。


基础


在开始改动前我们需要了解Apollo工程的整体结构,以及调试启动的方法。建议本地先搭建个MySQL库,然后把Apollo跑起来看看。官方对此有详细的文档


另外,从MySQL到Oracle,一个比较大的问题是Apollo中很多表名、字段名和Oracle的关键字有冲突,导致无法在Oracle建表。这个问题可以使用双引号来解决。我们知道,Oracle的SQL语句在解释时会把所有的字符都转为大写(字符串常量除外),所以我们一般认为Oracle的SQL语法不区分大小写。比如说我可以用如下SQL建表:


create TaBle aPplicAtiOn(...);

最终我们会得到一张名为APPLICATION的表。在一些情况下,我们会需要区分大小写的表名,这时候我们可以在建表时用双引号将表名括起来:


create TaBle ‘aPplicAtiOn‘(...);

这样,我们就真正得到了名为aPplicAtiOn的表了。同理,字段名、同名等Oracle对象也都可以用双引号来区分大小写。关于Oracle双引号,这里有更多的讲解。


Oracle适配改动


下面的改动大部分是参考已有的vanpersl/apollo基于0.8.0的Oracle版本的代码。这里是他的修改内容。


总体来说改动量不大。我大约花了一天的时间完成了整个改动。下面是改动步骤。


准备数据库用户



Apollo工程加入ojdbc的依赖



修改数据库连接配置



spring.datasource.url=jdbc:oracle:thin:@{ip}:{port}:{db}
spring.datasource.username={ApolloConfig|ApolloPortal}
spring.datasource.password={password}

添加Oracle配置。


这些配置改动在apollo-commonapplication.properties配置文件。



Sequence



public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ‘sequence‘)
@SequenceGenerator(name = ‘sequence‘, sequenceName = ‘ID_SEQ‘, allocationSize = 1)
@Column(name = ‘Id‘)
private long id;
...
}

Oracle关键字的问题


这部分的改动最多,也最枯燥。合理利用IDE的replace功能可以极大的提高修改效率。



spring.jpa.hibernate.globally_quoted_identifiers=true
spring.jpa.properties.hibernate.globally_quoted_identifiers=true

这样Hibernate的ORM生成SQL语句时就会自动给表名列名都加上双引号。



成果


我最后修改的结果上传在这里:https://github.com/sKabYY/apollo
目前已经平稳运行。后面如果有bug修改或者升级也会更新上去。


和原代码的对比可以看这里

原文:https://www.cnblogs.com/yangzhuxian/p/13415887.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!