分布式锁
当我们的微服务连接到一个数据库的时候,可以使用mysql的 select for update 来作为分布式锁使用。
pictureMapper.findLock();
select id from table_lock where id = 'lock' for update
由于我们查询的时候 默认会自动提交,即autoCommit为true。所以有2中方式可以解决。
方式1:
给当前的事务添加@Transactional注解
方式2:
设置提交方式为非自动提交,让我们手动来提交。
conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
connAutoCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
preparedStatement = conn.prepareStatement( "select * from xxl_job_lock where lock_name = 'schedule_lock' for update" );
preparedStatement.execute();
conn.commit();