springboot项目中的mysql用国产数据库达梦替换的相关说明
1. mysql数据库转达梦数据库步骤以及注意事项。2. springboot项目中相关的数据库部分转达梦进行的一系列转化注意事项。
一、 用“DM管理工具”的“管理用户”创建你需要用户,也是达梦的模式。
用户的权限问题可以直接角色授权,方便一些。
二、借用达梦的“DM数据迁移工具”做数据库的表内容转移。
1. 新建工程、新建迁移
编辑mysql的数据库源
编辑达梦的目的端数据库
选择之前已建的用户模式
选择要迁移的表,点击下一步,
直接点完成。
点“完成”时,若同步存在问题,则点击“详细信息进行查看”,针对性处理。点击“重新迁移出错的任务”,重新同步。
三、以上的表的同步。接下来是事件。
MySQL的事件功能同Oracle里面的JOB,作为定时任务使用。而达梦又类似于oracle。
此次参考“DM7系统管理员手册.pdf”将mysql的事件转成达梦的job。
-- 启动代理作业/开始一个job
SP_INIT_JOB_SYS (1);
-- 要邮件推送,则增加创建操作员的动作
-- SP_CREATE_OPERATOR('xht', 1, 'xieht@zkxa.com.cn', '192.168.0.145');-- 新建job并注释
call SP_CREATE_JOB('deleteLog', 1, 0, '', 0, 0, '', 0, '每分钟运行存储过程,做日志回滚。');
--开始配置job
call SP_JOB_CONFIG_START( 'deleteLog');
--新建job步骤
call SP_ADD_JOB_STEP('deleteLog', 'setp1', 0, 'call deleteLog();', 0, 0, 0, 0, NULL, 0);
--配置调度,从现在开始每天每间隔一分钟执行
call SP_ADD_JOB_SCHEDULE( 'deleteLog', 'setp1', 1 , 1, 1, 0, 1, CURTIME, '23:59:59', CURDATE, NULL, '从现在开始每天每间隔一分钟执行');
--提交作业
call SP_JOB_CONFIG_COMMIT( 'deleteLog');
tips:
1)作业的建立,从开启到提交作业需要按照顺序,同时“提交作业”的步骤不能随意提前,避免回滚失败。
2)SP_ADD_JOB_STEP 如果有多步骤,要用分号隔开。
SP_ADD_JOB_STEP('TEST', 'STEP2', 0, 'insert into myinfo values(1000, ''STEP2 Hello World'');insert into myinfo values(1000, ''STEP2 Hello World'');', 0, 0, 1, 1, NULL, 0);
四、存储过程转达梦
除了网上说的mysql到达梦的函数或者方法的转化注意事项外,我阐述下我遇到的小坑。
1. mysql的存储过程代码中存在下面的一段赋值,在达梦中频繁出问题。
set v_snort_save_num = v_retain_per * (v_snort_num/v_sum) * v_memory_size /100;
1)“v_snort_num/v_sum”,mysql中是除法,可以得出小数,在达梦中是求整数部分,结果为0。
于是,为了解决上述的问题,我调整了顺序,
v_snort_save_num = v_retain_per* v_memory_size /100 * v_ftp_num/v_sum;
五、springboot的配置调整
1. pom.xml增加依赖
<dependency> <groupId>com.dameng</groupId> <artifactId>DmJdbcDriver18</artifactId> <version>8.1.1.193</version> </dependency> <dependency> <groupId>com.dameng</groupId> <artifactId>DmDialect-for-hibernate5.3</artifactId> <version>8.1.2.192</version> </dependency>
2. 修改yml文件,主要是驱动和连接
spring: datasource: driver-class-name: dm.jdbc.driver.DmDriver url: jdbc:dm://192.168.0.1XX:5236/LOCALHOST?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 username: ZZZZZZZZ password: Zzzz~1234 jpa: properties: hibernate: dialect: org.hibernate.dialect.DmDialect show-sql: true
3. generator生成器修改
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 导入配置文件 -->
<properties resource="application.yml"/>
<classPathEntry location="D:\mvn_repository\com\dameng\DmJdbcDriver18\8.1.1.193\DmJdbcDriver18-8.1.1.193.jar"/>
<!-- defaultModelType="flat" 设置复合主键时不单独为主键创建实体 -->
<context id="MySql" defaultModelType="flat">
<!--分割SQL关键字 默认为false-->
<property name="autoDelimitKeywords" value="true" />
<!--分割关键字的前符号-->
<!--<property name="beginningDelimiter" value="`" />-->
<!--分割关键字的后符号-->
<!--<property name="endingDelimiter" value="`" />-->
<!-- 生成的POJO实现java.io.Serializable接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
<!-- 覆盖生成的xml,而不是追加 -->
<commentGenerator>
<property name="suppressDate" value="true"/>
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库连接,直接通过${}读取application.properties里的配置 -->
<jdbcConnection
driverClass="dm.jdbc.driver.DmDriver"
connectionURL="jdbc:dm://192.168.0.1XX:5236/LOCALHOST;zeroDateTimeBehavior=convertToNull;useUnicode=true;characterEncoding=utf-8"
userId="ZZZZZZZZ"
password="Zzzz~1234">
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!-- 生成POJO对象 -->
<javaModelGenerator targetPackage="com.jlszkxa.gsi.pojo.DO"
targetProject="src/main/java">
</javaModelGenerator>
<!-- 生成mapper xml文件 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 生成mapper xml对应dao接口-->
<javaClientGenerator targetPackage="com.jlszkxa.gsi.dao"
targetProject="src/main/java" type="XMLMAPPER">
</javaClientGenerator>
<!--生成对应表及类名-->
<table tableName="t_mail_config" domainObjectName="IpMacConfig"
enableCountByExample="true" enableUpdateByExample="true"
enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">
<generatedKey column="id" sqlStatement="SYBASE" identity="true"/>
</table>
</context>
</generatorConfiguration>
tips:
1)分割关键字“beginningDelimiter”在mysql是“`”,oracle与达梦是双引号,generator默认是双引号,所以屏蔽就行。
2)配置路劲“connectionURL”,yml中我们写的是&,在此处要用分号;替换。
3)主键自增“generatedKey ”要调整为sqlStatement="SYBASE"。其他数据库的自增参考下面:
sqlStatement:要生成的selectKey语句,有以下可选项:
Cloudscape:相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()
DB2 :相当于selectKey的SQL为: VALUES IDENTITY_VAL_LOCAL()
DB2_MF :相当于selectKey的SQL为:SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
Derby :相当于selectKey的SQL为:VALUES IDENTITY_VAL_LOCAL()
HSQLDB :相当于selectKey的SQL为:CALL IDENTITY()
Informix :相当于selectKey的SQL为:select dbinfo('sqlca.sqlerrd1') from systables where tabid=1
MySql :相当于selectKey的SQL为:SELECT LAST_INSERT_ID()
SqlServer :相当于selectKey的SQL为:SELECT SCOPE_IDENTITY()
SYBASE :相当于selectKey的SQL为:SELECT @@IDENTITY
JDBC :相当于在生成的insert元素上添加useGeneratedKeys="true"和keyProperty属性
结束!
更多推荐
所有评论(0)