一、jdk11在分布式事务中错误信息解决

image.png
解决方案:
https://www.cnblogs.com/ifme/p/12821385.html
增加JVM启动参数:—illegal-access=deny
二、事务与数据库约束的问题
分布式事务中,设当前项目中有Student和Book项目,在项目中添加分布式事务控制的前提下,执行新增操作,当student项目执行向student表中添加数据后调用book项目中给book表中添加数据。studnet表:sid,sname,age。book表:bid,bname,sid。
如果设置sid为外键,则进行新增操作时studnet新增数据后,sid的外键约束条件满足,但是此时数据库并未真正提交,数据获取与约束之间产生冲突,所以控制台会输出如下的错误信息:

Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (eureka.book, CONSTRAINT a FOREIGN KEY (sid) REFERENCES student (sid))

解决思路:子表中需要用到的主表的字段,如自增的字段不设置约束条件,且主表中尽量应该有单独的作为自增的字段。
测试方法:当有sid外键的情况下,找出数据库中已经存在的sid,保证外键成立。设sid为数据库已有值,进行book表的添加,结果为添加成功,说明了数据获取与约束之间产生冲突了。
三、Redis中保证主键唯一的方式

  • 时间戳
  • UUID

四、新增数据操作到Redis和数据库表中
写到不同的方法中做不同的事务声明。