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阶段一(新拉下来项目)
- 用IDEA打开iot-iita-core,等待项目加载完成以后,打开 maven 栏在根目录点击 install
- 用IDEA打开iotkit-parent,等待项目加载完成,执行maven reload all project
- 修改iot-starter\application.yml,注释H2配置,打开MySQL配置:
- 修改iot-dao\iot-data-serviceImpl-rdb\pom.xml,打开MySQL依赖(使用mysql-connector-j)
- 在本地MySQL创建iotkit数据库
- 启动项目
结果:报错如上,有几张表未初始化成功。
3.2阶段二(执行完阶段一后)
- 删除.init和elasticsearch(iotkit.mv.db、iotkit.trace.db文件未找到)
- 清除数据库
- 重启项目
结果:报错如上,有几张表未初始化成功。
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数据库,重启项目,所有表都创建成功!