1. 兼容国产化数据库背景
公司项目中之前使用的是mysql数据库,框架是SpringCloud + JPA + MySql属于微服务框架,由于接到的项目需要用到国产化数据库——神通数据库,从而了解到有神通数据库,之前没怎么了解过,通过网上找资料发现神通数据库的相关资料比较少见,而相关的数据库语法等资料更是少,从神通数据库的安装包找了下还是有好几个相关文档的,但大部分的都是应对windows系统,而我开始机器是MAC很不巧,后来也查找了一些文档和自己的不断试错,终于算是初步调通神通数据库的兼容,尽量少的改写原有项目代码,说着这么多下面直接上干货;
2.兼容神通数据库的准备工作;
由于神通数据库有自己的驱动oscarJDBC16.jar包和方言oscarHibernate5.jar,maven中央仓库是没有的,需要将这两个包以第三方包添加到maven私服nexus中,这里就不具体说步骤了,不太了解的可以区查询maven私服仓库,由于CSDN限制上传jar包,文档末尾会附上jar包链接;
以下是我上传maven私服后生成的maven依赖
<dependency> <groupId>com.stdb</groupId> <artifactId>stoscarJDBC16</artifactId> <version>1.0</version> </dependency>
<dependency> <groupId>com.stdb</groupId> <artifactId>oscarHibernate5</artifactId> <version>1.0</version> </dependency>
3.配置yam文件
spring:
datasource:
driver-class-name: com.oscar.Driver
# CserverTimezone=Asia/Shanghai 设置时区
# currentSchema=USRT 可以支持原生sql找到表
url: jdbc:oscar://192.168.10.1:8003/OSRDB?CserverTimezone=Asia/Shanghai&useSSL=FALSE¤tSchema=USER
username: SYSDBA
password: szoscar55
jpa:
hibernate:
ddl-auto: update
# 设置数据库方言
database-platform: org.hibernate.dialect.OscarDialect
showSql: true
# 配置默认scheme
properties:
hibernate:
default_schema: USER
上面的配置文件是采了好多坑的最终形态,特别注意有几个点
(1)设置时区,不设置时区可能存在时间偏差,spring默认是UTC时间;
(2)设置schema
由于神通数据库有些类似ORACLE数据库,数据库下面不直接是表,还有一层也就是配置schema的名字,需要注意要配置两处就可以不需要每张表的映射对象都添加schema参数。
不需要添加 @Table(name = "user_info", schema = "USER")
第一处:单独配置的spring.jpa.properties.hibernate.default_schema = USER(需要配置的schema) 这里的配置可以支持JPA的HQL语法写的语句(在dao层写的对象查询语句);
第二处:追加到url配置后面的currentSchema=USER,这里的添加是为了适配在DAO层写原生sql语句找到表;
第三处:网上有其它神通数据库配置的有的会配置spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl,在我这里被去除了,原有是由于项目中有部分人开发表映射对象时字段中没有@Column注解(表中字段是带有下划线,而项目中使用的是驼峰);
(3)设置方言
将jpa中配置的方言修改成神通数据库的方言,如果不配置会报Dialect错误,而且这块配置需要依赖oscarHibernate5.jar包;
以上就是我初识神通数据库的理解与整理,如果说的不准确的地方欢迎各位大神评论,下面附上带有两个JAR包的链接