开源铱塔切换MySQL数据库启动报异常

1.错误日志:

铱塔切换数据库配置为MySQL之后,启动后报错如下:

SqlExceptionHelper - Table 'iotkit.task_info' doesn't exist
SqlExceptionHelper - Table 'iotkit.rule_info' doesn't exist
SqlExceptionHelper - Table 'iotkit.device_info' doesn't exist
SqlExceptionHelper - Table 'iotkit.virtual_device' doesn't exist

2.环境:

  •  JDK : corretto-11

  • iotkit-parent : V0.5.X

  • MySQL:5.5.27

3.操作:

3.1阶段一(新拉下来项目)
  1. 用IDEA打开iot-iita-core,等待项目加载完成以后,打开 maven 栏在根目录点击 install
  2. 用IDEA打开iotkit-parent,等待项目加载完成,执行maven reload all project
  3. 修改iot-starter\application.yml,注释H2配置,打开MySQL配置:
  4. 修改iot-dao\iot-data-serviceImpl-rdb\pom.xml,打开MySQL依赖(使用mysql-connector-j)
  5. 在本地MySQL创建iotkit数据库
  6. 启动项目

结果:报错如上,有几张表未初始化成功。

3.2阶段二(执行完阶段一后)

  1. 删除.init和elasticsearch(iotkit.mv.db、iotkit.trace.db文件未找到)
  2. 清除数据库
  3. 重启项目

结果:报错如上,有几张表未初始化成功。

4.分析

根据报错日志,可知是表未创建成功。

5.原因

代码中的主键生成策略为整型的,不适用于String类型的主键,导致创建表失败

6.解决方案

将iotkit-parent\iot-dao\iot-data-serviceImpl-rdb\src\main\java\cc\iotkit\data\model目录下,所有Tb开头的类,主键类型为String类型的,主键生成策略修改为UUID

@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
@Column(length = 36)
@ApiModelProperty(value = "主键")
private String id;

重新删除.init文件夹,清空iotkit数据库,重启项目,所有表都创建成功!

7.补充

上述解决方案仍存在问题,设置主键生成策略为UUID后,会导致/data/init里面的初始化数据的id字段值不生效,会默认使用配置的UUID主键生成策略。

因此,解决方案更新为如下(不再设置主键生成策略):

@Id
@Column(length = 36)
@ApiModelProperty(value = "主键")
private String id;

至此,初始化数据成功!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL是一种开源的关系型数据库管理系统(RDBMS),它是世界上最流行的数据库之一。MySQL是一个客户端/服务器系统,可以通过多种编程语言进行访问,包括PHP、Java、Python、C++等。MySQL具有以下特点: 1. 可扩展性:MySQL可以处理大量数据和大量用户,可以在多个服务器之间进行分布式处理,以提高性能和可靠性。 2. 安全性:MySQL提供了许多安全功能,包括加密连接、角色和权限管理、日志记录和审计等。 3. 高性能:MySQL使用了许多优化技术,包括索引、查询缓存、预编译等,以提高查询性能和响应时间。 4. 可靠性:MySQL具有高可用性和故障恢复能力,可以自动切换到备份服务器,以保证数据的可靠性和可用性。 5. 易用性:MySQL具有友好的图形界面和命令行界面,支持多种操作系统和平台,可以轻松地进行安装、配置和管理。 MySQL的数据存储方式是以表格的形式进行的,每个表格都包含一个或多个列,每个列有一个数据类型和一个列名。MySQL支持多种数据类型,包括整数、浮点数、日期、时间、字符串等。MySQL还支持多种查询语句,包括SELECT、INSERT、UPDATE和DELETE等,可以用于查询、插入、更新和删除数据。MySQL还支持事务处理,可以保证数据的一致性和完整性。 MySQL也支持多种存储引擎,包括InnoDB、MyISAM、Memory等。不同的存储引擎具有不同的特点,可以根据应用场景和需求进行选择。例如,InnoDB支持事务处理、行级锁定、外键约束等,适合于高并发、高可靠性的应用场景;MyISAM支持全文索引、高速读取等,适合于读写比例较低的应用场景。 MySQL还支持多语言和字符集,可以用于处理多种语言和字符集的数据。MySQL支持UTF-8和GBK等多种字符集,可以用于处理中文和其他语言的数据。MySQL还支持多种国际化功能,包括时间和日期格式、货币和数字格式、字符排序等。 总之,MySQL是一种功能强大、可靠性高、性能优越、易于使用的关系型数据库管理系统,被广泛应用于互联网、企业和个人应用中。MySQL具有开源、免费、跨平台等优点,是一种理想的数据库解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值