diff --git a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/config/DataAccessAutoConfiguration.java b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/config/DataAccessAutoConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..e124be212c8fe3a71278624d0875e0b2bfe3476a --- /dev/null +++ b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/config/DataAccessAutoConfiguration.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2022-2022 Huawei Technologies Co.,Ltd. + * + * openGauss is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * + * http://license.coscl.org.cn/MulanPSL2 + * + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.opengauss.datachecker.extract.config; + +import org.opengauss.datachecker.common.entry.enums.DataBaseType; +import org.opengauss.datachecker.common.entry.enums.DataLoad; +import org.opengauss.datachecker.common.entry.enums.Endpoint; +import org.opengauss.datachecker.extract.data.access.CsvDataAccessService; +import org.opengauss.datachecker.extract.data.access.DataAccessService; +import org.opengauss.datachecker.extract.data.access.MysqlDataAccessService; +import org.opengauss.datachecker.extract.data.access.OpgsDataAccessService; +import org.opengauss.datachecker.extract.data.mapper.MetaDataMapper; +import org.opengauss.datachecker.extract.data.mapper.MysqlMetaDataMapper; +import org.opengauss.datachecker.extract.data.mapper.OpgsMetaDataMapper; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; +import java.util.Map; +import java.util.Objects; + +/** + * CSV DataSourceConfig + * + * @author :wangchao + * @date :Created in 2022/5/23 + * @since :11 + */ +@Configuration +public class DataAccessAutoConfiguration { + @Value("${spring.extract.endpoint}") + private Endpoint endpoint; + @Value("${spring.extract.databaseType}") + private DataBaseType databaseType; + @Value("${spring.extract.dataLoadMode}") + private DataLoad dataLoadMode; + + @Resource + private MysqlMetaDataMapper mysqlMetaDataMapper; + @Resource + private OpgsMetaDataMapper opgsMetaDataMapper; + + @Bean + public DataAccessService createDataAccessService() { + Map mybatisMappers = + Map.of(DataBaseType.MS, this.mysqlMetaDataMapper, DataBaseType.OG, opgsMetaDataMapper); + return new DataAccessServiceBeanFactory(mybatisMappers).create(endpoint, databaseType, dataLoadMode); + } + + static class DataAccessServiceBeanFactory { + private final Map mybatisMappers; + + public DataAccessServiceBeanFactory(Map mybatisMappers) { + this.mybatisMappers = mybatisMappers; + } + + public DataAccessService create(Endpoint endpoint, DataBaseType dataBaseType, DataLoad dataLoad) { + if (Objects.equals(DataLoad.CSV, dataLoad)) { + return createDataLoadOfCsv(endpoint, dataBaseType); + } else { + return createOf(dataBaseType); + } + } + + private DataAccessService createDataLoadOfCsv(Endpoint endpoint, DataBaseType dataBaseType) { + if (Objects.equals(Endpoint.SOURCE, endpoint)) { + return new CsvDataAccessService(); + } else { + return createOf(dataBaseType); + } + } + + private DataAccessService createOf(DataBaseType targetDataBaseType) { + if (Objects.equals(DataBaseType.OG, targetDataBaseType)) { + return new OpgsDataAccessService((OpgsMetaDataMapper) mybatisMappers.get(targetDataBaseType)); + } else if (Objects.equals(DataBaseType.MS, targetDataBaseType)) { + return new MysqlDataAccessService((MysqlMetaDataMapper) mybatisMappers.get(targetDataBaseType)); + } else { + return new MysqlDataAccessService((MysqlMetaDataMapper) mybatisMappers.get(DataBaseType.MS)); + } + } + } +} diff --git a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/AbstractDataAccessService.java b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/AbstractDataAccessService.java index 2b77253067a8b3fd49cd54555b73e03f4d47ec58..b5edd5af4646cc7dd621acf81945efee8bc0ff96 100644 --- a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/AbstractDataAccessService.java +++ b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/AbstractDataAccessService.java @@ -20,12 +20,10 @@ import org.opengauss.datachecker.common.entry.check.Difference; import org.opengauss.datachecker.common.entry.enums.DataBaseMeta; import org.opengauss.datachecker.common.entry.extract.TableMetadata; import org.opengauss.datachecker.common.util.LogUtils; -import org.opengauss.datachecker.extract.config.DruidDataSourceConfig; import org.opengauss.datachecker.extract.config.ExtractProperties; import org.opengauss.datachecker.extract.dao.MetaSqlMapper; import org.opengauss.datachecker.extract.task.ResultSetHandlerFactory; import org.opengauss.datachecker.extract.task.ResultSetHashHandler; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; @@ -44,7 +42,6 @@ import java.util.Map; * @date :Created in 2023/7/10 * @since :11 */ -@ConditionalOnBean(DruidDataSourceConfig.class) public abstract class AbstractDataAccessService implements DataAccessService { private static final Logger log = LogUtils.getLogger(); protected boolean isOgCompatibilityB = false; diff --git a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/CsvDataAccessService.java b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/CsvDataAccessService.java index 9b1a82f7304e6cccfdc0819a96bf55c8bdb3fd54..f39b03de9528b7af24a80dbca0791caa631c46e1 100644 --- a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/CsvDataAccessService.java +++ b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/CsvDataAccessService.java @@ -30,10 +30,7 @@ import org.opengauss.datachecker.common.entry.extract.TableMetadata; import org.opengauss.datachecker.common.exception.CsvDataAccessException; import org.opengauss.datachecker.common.exception.ExtractDataAccessException; import org.opengauss.datachecker.common.util.LogUtils; -import org.opengauss.datachecker.extract.config.CsvSourceConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.jdbc.core.RowMapper; -import org.springframework.stereotype.Service; import javax.sql.DataSource; import java.io.FileReader; @@ -56,7 +53,6 @@ import java.util.stream.Stream; * @date :Created in 2023/7/10 * @since :11 */ -@ConditionalOnBean(CsvSourceConfiguration.class) public class CsvDataAccessService implements DataAccessService { private static final Logger log = LogUtils.getLogger(); private Map tableMetadataMap = new ConcurrentHashMap<>(); diff --git a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/MysqlDataAccessService.java b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/MysqlDataAccessService.java index 04d3cfc62e709054678d6360ba02dee8a50f5e86..cc63156a1a09087218fd54ed5a03e1d1fa650a03 100644 --- a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/MysqlDataAccessService.java +++ b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/MysqlDataAccessService.java @@ -18,13 +18,8 @@ package org.opengauss.datachecker.extract.data.access; import org.opengauss.datachecker.common.entry.common.DataAccessParam; import org.opengauss.datachecker.common.entry.extract.ColumnsMetaData; import org.opengauss.datachecker.common.entry.extract.TableMetadata; -import org.opengauss.datachecker.extract.config.DruidDataSourceConfig; import org.opengauss.datachecker.extract.data.mapper.MysqlMetaDataMapper; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; -import javax.annotation.Resource; import java.util.List; /** @@ -34,13 +29,13 @@ import java.util.List; * @date :Created in 2023/7/10 * @since :11 */ -@Service -@ConditionalOnBean(DruidDataSourceConfig.class) -@ConditionalOnProperty(prefix = "spring.extract", name = "databaseType", havingValue = "MS") public class MysqlDataAccessService extends AbstractDataAccessService { - @Resource private MysqlMetaDataMapper mysqlMetaDataMapper; + public MysqlDataAccessService(MysqlMetaDataMapper mysqlMetaDataMapper) { + this.mysqlMetaDataMapper = mysqlMetaDataMapper; + } + @Override public boolean health() { return mysqlMetaDataMapper.health(); diff --git a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/OpgsDataAccessService.java b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/OpgsDataAccessService.java index 96d5d4f76b153bf98da1b6c4b96ff60a6a1ff1f0..8c1ffa4a3119b3b8e9c6210d4196b1f843b6e3a2 100644 --- a/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/OpgsDataAccessService.java +++ b/datachecker-extract/src/main/java/org/opengauss/datachecker/extract/data/access/OpgsDataAccessService.java @@ -19,14 +19,9 @@ import org.opengauss.datachecker.common.entry.common.DataAccessParam; import org.opengauss.datachecker.common.entry.enums.OgCompatibility; import org.opengauss.datachecker.common.entry.extract.ColumnsMetaData; import org.opengauss.datachecker.common.entry.extract.TableMetadata; -import org.opengauss.datachecker.extract.config.DruidDataSourceConfig; import org.opengauss.datachecker.extract.data.mapper.OpgsMetaDataMapper; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; -import javax.annotation.Resource; import java.util.List; import java.util.Objects; @@ -37,13 +32,13 @@ import java.util.Objects; * @date :Created in 2023/7/10 * @since :11 */ -@Service -@ConditionalOnBean(DruidDataSourceConfig.class) -@ConditionalOnProperty(prefix = "spring.extract", name = "databaseType", havingValue = "OG") public class OpgsDataAccessService extends AbstractDataAccessService { - @Resource private OpgsMetaDataMapper opgsMetaDataMapper; + public OpgsDataAccessService(OpgsMetaDataMapper opgsMetaDataMapper) { + this.opgsMetaDataMapper = opgsMetaDataMapper; + } + @Override @PostConstruct public boolean isOgCompatibilityB() { diff --git a/datachecker-extract/src/main/resources/mapper/MysqlMetaDataMapper.xml b/datachecker-extract/src/main/resources/mapper/MysqlMetaDataMapper.xml index 255447821a8bc8f78199823e615ab5ecca8ba206..461f21ffbfa1b04dfbc83412e12fa3d8a63df519 100644 --- a/datachecker-extract/src/main/resources/mapper/MysqlMetaDataMapper.xml +++ b/datachecker-extract/src/main/resources/mapper/MysqlMetaDataMapper.xml @@ -64,7 +64,7 @@ select table_name tableName ,column_name columnName, ordinal_position ordinalPosition, data_type dataType, column_type columnType,column_key columnKey, extra extra from information_schema.columns - where table_schema=#{schema} and table_name =#{name} + where table_schema=#{schema} and table_name =#{name} order by ordinal_position asc