From ac86f8aded5d02d61468a8906d950c181121a039 Mon Sep 17 00:00:00 2001 From: Yang Jing Date: Sun, 5 Jul 2020 00:42:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=93=E4=BD=BF=E7=94=A8=20PostgreSQL=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=97=B6=EF=BC=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=20insert=20on=20conflict=20=E6=9B=BF=E4=BB=A3=20MySQL=20?= =?UTF-8?q?=E7=9A=84=20replace=20SQL=E8=AF=AD=E5=8F=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kafka/manager/dao/impl/BrokerDaoImpl.java | 6 +++++ .../dao/impl/KafkaManagerProperties.java | 22 +++++++++++++++++++ .../kafka/manager/dao/impl/RegionDaoImpl.java | 6 +++++ .../kafka/manager/dao/impl/TopicDaoImpl.java | 6 +++++ .../dao/impl/TopicFavoriteDaoImpl.java | 6 +++++ dao/src/main/resources/mapper/BrokerDao.xml | 10 +++++++++ dao/src/main/resources/mapper/RegionDao.xml | 9 ++++++++ dao/src/main/resources/mapper/TopicDao.xml | 9 ++++++++ .../resources/mapper/TopicFavoriteDao.xml | 9 ++++++++ .../service/impl/AdminTopicServiceImpl.java | 2 ++ web/src/main/resources/application-mysql.yml | 3 --- web/src/main/resources/application-pg.yml | 3 --- 12 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/KafkaManagerProperties.java diff --git a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/BrokerDaoImpl.java b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/BrokerDaoImpl.java index 397ef54c..16cda81f 100644 --- a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/BrokerDaoImpl.java +++ b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/BrokerDaoImpl.java @@ -19,12 +19,18 @@ public class BrokerDaoImpl implements BrokerDao { @Autowired private SqlSessionTemplate sqlSession; + @Autowired + private KafkaManagerProperties kafkaManagerProperties; + public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } @Override public int replace(BrokerDO brokerInfoDO) { + if (kafkaManagerProperties.hasPG()) { + return sqlSession.insert("BrokerDao.replaceOnPG", brokerInfoDO); + } return sqlSession.insert("BrokerDao.replace", brokerInfoDO); } diff --git a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/KafkaManagerProperties.java b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/KafkaManagerProperties.java new file mode 100644 index 00000000..d762c4ce --- /dev/null +++ b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/KafkaManagerProperties.java @@ -0,0 +1,22 @@ +package com.xiaojukeji.kafka.manager.dao.impl; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +@Component +@ConfigurationProperties("spring.datasource.kafka-manager") +public class KafkaManagerProperties { + private String jdbcUrl; + + public String getJdbcUrl() { + return jdbcUrl; + } + + public void setJdbcUrl(String jdbcUrl) { + this.jdbcUrl = jdbcUrl; + } + + public boolean hasPG() { + return jdbcUrl.startsWith("jdbc:postgres"); + } +} diff --git a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/RegionDaoImpl.java b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/RegionDaoImpl.java index 1b9b17ad..7f62ed5c 100644 --- a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/RegionDaoImpl.java +++ b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/RegionDaoImpl.java @@ -17,12 +17,18 @@ public class RegionDaoImpl implements RegionDao { @Autowired private SqlSessionTemplate sqlSession; + @Autowired + private KafkaManagerProperties kafkaManagerProperties; + public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } @Override public int insert(RegionDO regionDO) { + if (kafkaManagerProperties.hasPG()) { + return sqlSession.insert("RegionDao.insertOnPG", regionDO); + } return sqlSession.insert("RegionDao.insert", regionDO); } diff --git a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicDaoImpl.java b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicDaoImpl.java index f5a65ac3..7c5bac5f 100644 --- a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicDaoImpl.java +++ b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicDaoImpl.java @@ -19,12 +19,18 @@ public class TopicDaoImpl implements TopicDao { @Autowired private SqlSessionTemplate sqlSession; + @Autowired + private KafkaManagerProperties kafkaManagerProperties; + public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } @Override public int replace(TopicDO topicDO) { + if (kafkaManagerProperties.hasPG()) { + return sqlSession.insert("TopicDao.replaceOnPG", topicDO); + } return sqlSession.insert("TopicDao.replace", topicDO); } diff --git a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicFavoriteDaoImpl.java b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicFavoriteDaoImpl.java index 17170028..f8d0c7fc 100644 --- a/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicFavoriteDaoImpl.java +++ b/dao/src/main/java/com/xiaojukeji/kafka/manager/dao/impl/TopicFavoriteDaoImpl.java @@ -25,12 +25,18 @@ public class TopicFavoriteDaoImpl implements TopicFavoriteDao { @Autowired private TransactionTemplate transactionTemplate; + @Autowired + private KafkaManagerProperties kafkaManagerProperties; + public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } @Override public int batchAdd(List topicFavoriteDOList) { + if (kafkaManagerProperties.hasPG()) { + return sqlSession.insert("TopicFavoriteDao.batchAddOnPG", topicFavoriteDOList); + } return sqlSession.insert("TopicFavoriteDao.batchAdd", topicFavoriteDOList); } diff --git a/dao/src/main/resources/mapper/BrokerDao.xml b/dao/src/main/resources/mapper/BrokerDao.xml index 4ecacd25..7ef90b01 100644 --- a/dao/src/main/resources/mapper/BrokerDao.xml +++ b/dao/src/main/resources/mapper/BrokerDao.xml @@ -20,6 +20,16 @@ (#{clusterId}, #{brokerId}, #{host}, #{port}, #{timestamp}, #{status}) + + insert into broker + (cluster_id, broker_id, host, port, timestamp, status) + values + on conflict (cluster_id, broker_id) do update set host = excluded.host, + port = excluded.port, + timestamp = excluded.timestamp, + status = excluded.status + + DELETE FROM broker WHERE cluster_id = #{clusterId} AND broker_id = #{brokerId} diff --git a/dao/src/main/resources/mapper/RegionDao.xml b/dao/src/main/resources/mapper/RegionDao.xml index 591decb9..7b1c7daa 100644 --- a/dao/src/main/resources/mapper/RegionDao.xml +++ b/dao/src/main/resources/mapper/RegionDao.xml @@ -21,6 +21,15 @@ (#{regionName}, #{clusterId}, #{brokerList}, #{description}, #{operator}) + + insert into region + (region_name, cluster_id, broker_list, description, operator) + values (#{regionName}, #{clusterId}, #{brokerList}, #{description}, #{operator}) + on conflict (region_name, cluster_id) do update set broker_list = excluded.broker_list, + description = excluded.description, + operator = excluded.operator + + DELETE FROM region WHERE id = #{id} diff --git a/dao/src/main/resources/mapper/TopicDao.xml b/dao/src/main/resources/mapper/TopicDao.xml index 27d99e48..b078d4cf 100644 --- a/dao/src/main/resources/mapper/TopicDao.xml +++ b/dao/src/main/resources/mapper/TopicDao.xml @@ -19,6 +19,15 @@ (#{clusterId}, #{topicName}, #{principals}, #{description}, #{status}) + + insert into topic + (cluster_id, topic_name, principals, description, status) + values (#{clusterId}, #{topicName}, #{principals}, #{description}, #{status}) + on conflict (cluster_id, topic_name) do update set principals = excluded.principals, + description = excluded.description, + status = excluded.status + + DELETE FROM topic WHERE id = #{id} diff --git a/dao/src/main/resources/mapper/TopicFavoriteDao.xml b/dao/src/main/resources/mapper/TopicFavoriteDao.xml index 308a75ea..218a714c 100644 --- a/dao/src/main/resources/mapper/TopicFavoriteDao.xml +++ b/dao/src/main/resources/mapper/TopicFavoriteDao.xml @@ -21,6 +21,15 @@ + + insert into topic_favorite (cluster_id, topic_name, username) + values + + (#{TopicFavoriteDO.clusterId}, #{TopicFavoriteDO.topicName}, #{TopicFavoriteDO.username}) + + on conflict (cluster_id, topic_name, username) do update set gmt_modify = now(); + + DELETE FROM topic_favorite WHERE id=#{id} diff --git a/service/src/main/java/com/xiaojukeji/kafka/manager/service/service/impl/AdminTopicServiceImpl.java b/service/src/main/java/com/xiaojukeji/kafka/manager/service/service/impl/AdminTopicServiceImpl.java index f941dc63..3d245e61 100644 --- a/service/src/main/java/com/xiaojukeji/kafka/manager/service/service/impl/AdminTopicServiceImpl.java +++ b/service/src/main/java/com/xiaojukeji/kafka/manager/service/service/impl/AdminTopicServiceImpl.java @@ -76,6 +76,7 @@ public class AdminTopicServiceImpl implements AdminTopicService { OperationHistoryDO operationHistoryDO = OperationHistoryDO.newInstance(topicDO.getClusterId(), topicDO.getTopicName(), operator, OperationEnum.CREATE_TOPIC.message); operationHistoryDao.insert(operationHistoryDO); topicDao.replace(topicDO); + } catch (Exception e) { return AdminTopicStatusEnum.REPLACE_DB_FAILED; } @@ -188,4 +189,5 @@ public class AdminTopicServiceImpl implements AdminTopicService { } return AdminTopicStatusEnum.SUCCESS; } + } diff --git a/web/src/main/resources/application-mysql.yml b/web/src/main/resources/application-mysql.yml index 81c49e28..ea9dcc7c 100644 --- a/web/src/main/resources/application-mysql.yml +++ b/web/src/main/resources/application-mysql.yml @@ -18,9 +18,6 @@ spring: main: allow-bean-definition-overriding: true - profiles: - active: dev - logging: config: classpath:logback-spring.xml diff --git a/web/src/main/resources/application-pg.yml b/web/src/main/resources/application-pg.yml index e3530369..174d2002 100644 --- a/web/src/main/resources/application-pg.yml +++ b/web/src/main/resources/application-pg.yml @@ -22,9 +22,6 @@ spring: main: allow-bean-definition-overriding: true - profiles: - active: dev - logging: config: classpath:logback-spring.xml