From b5b47d905896ebd8b846bc2224e497e1982bc2ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8E=AB=E4=BA=89?= Date: Fri, 31 May 2024 07:11:20 +0000 Subject: [PATCH] =?UTF-8?q?=E3=80=90fix=E3=80=91souce=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=97=B6schema=E5=9C=A8create=E3=80=81sync=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 莫争 --- .../java/datart/server/job/SchemaSyncJob.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/server/src/main/java/datart/server/job/SchemaSyncJob.java b/server/src/main/java/datart/server/job/SchemaSyncJob.java index 93bcf6fd..34e51706 100644 --- a/server/src/main/java/datart/server/job/SchemaSyncJob.java +++ b/server/src/main/java/datart/server/job/SchemaSyncJob.java @@ -100,28 +100,30 @@ public class SchemaSyncJob implements Job, Closeable { } private boolean upsertSchemaInfo(String sourceId, List schemaItems) { - TransactionStatus transaction = TransactionHelper.getTransaction(TransactionDefinition.PROPAGATION_REQUIRES_NEW, TransactionDefinition.ISOLATION_REPEATABLE_READ); - try { - SourceSchemasMapperExt mapper = Application.getBean(SourceSchemasMapperExt.class); - SourceSchemas sourceSchemas = mapper.selectBySource(sourceId); - if (sourceSchemas == null) { - sourceSchemas = new SourceSchemas(); - sourceSchemas.setId(UUIDGenerator.generate()); - sourceSchemas.setSourceId(sourceId); - sourceSchemas.setUpdateTime(new Date()); - sourceSchemas.setSchemas(OBJECT_MAPPER.writeValueAsString(schemaItems)); - mapper.insert(sourceSchemas); - } else { - sourceSchemas.setUpdateTime(new Date()); - sourceSchemas.setSchemas(OBJECT_MAPPER.writeValueAsString(schemaItems)); - mapper.updateByPrimaryKey(sourceSchemas); + synchronized (sourceId.intern()) { + TransactionStatus transaction = TransactionHelper.getTransaction(TransactionDefinition.PROPAGATION_REQUIRES_NEW, TransactionDefinition.ISOLATION_REPEATABLE_READ); + try { + SourceSchemasMapperExt mapper = Application.getBean(SourceSchemasMapperExt.class); + SourceSchemas sourceSchemas = mapper.selectBySource(sourceId); + if (sourceSchemas == null) { + sourceSchemas = new SourceSchemas(); + sourceSchemas.setId(UUIDGenerator.generate()); + sourceSchemas.setSourceId(sourceId); + sourceSchemas.setUpdateTime(new Date()); + sourceSchemas.setSchemas(OBJECT_MAPPER.writeValueAsString(schemaItems)); + mapper.insert(sourceSchemas); + } else { + sourceSchemas.setUpdateTime(new Date()); + sourceSchemas.setSchemas(OBJECT_MAPPER.writeValueAsString(schemaItems)); + mapper.updateByPrimaryKey(sourceSchemas); + } + TransactionHelper.commit(transaction); + return true; + } catch (Exception e) { + TransactionHelper.rollback(transaction); + log.error("source schema parse error ", e); + return false; } - TransactionHelper.commit(transaction); - return true; - } catch (Exception e) { - TransactionHelper.rollback(transaction); - log.error("source schema parse error ", e); - return false; } } -- Gitee