Class PersistService

  • Direct Known Subclasses:
    PermissionPersistService, RolePersistService, UserPersistService

    @Repository
    public class PersistService
    extends Object
    数据库服务,提供ConfigInfo在数据库的存取
    3.0开始增加数据版本号, 并将物理删除改为逻辑删除
    3.0增加数据库切换功能
    Since:
    1.0
    Author:
    boyan, leiwen.zh
    • Field Detail

      • USER_ROW_MAPPER

        protected static final com.alibaba.nacos.config.server.service.PersistService.UserRowMapper USER_ROW_MAPPER
      • jt

        protected org.springframework.jdbc.core.JdbcTemplate jt
      • tjt

        protected org.springframework.transaction.support.TransactionTemplate tjt
    • Constructor Detail

      • PersistService

        public PersistService()
    • Method Detail

      • init

        @PostConstruct
        public void init()
      • checkMasterWritable

        public boolean checkMasterWritable()
      • setBasicDataSourceService

        public void setBasicDataSourceService​(DataSourceService dataSourceService)
      • getJdbcTemplate

        public org.springframework.jdbc.core.JdbcTemplate getJdbcTemplate()
        单元测试用
      • getTransactionTemplate

        public org.springframework.transaction.support.TransactionTemplate getTransactionTemplate()
      • getCurrentDBUrl

        public String getCurrentDBUrl()
      • addConfigInfo

        public void addConfigInfo​(String srcIp,
                                  String srcUser,
                                  ConfigInfo configInfo,
                                  Timestamp time,
                                  Map<String,​Object> configAdvanceInfo,
                                  boolean notify)
        添加普通配置信息,发布数据变更事件
      • addConfigInfo4Beta

        public void addConfigInfo4Beta​(ConfigInfo configInfo,
                                       String betaIps,
                                       String srcIp,
                                       String srcUser,
                                       Timestamp time,
                                       boolean notify)
        添加普通配置信息,发布数据变更事件
      • addConfigInfo4Tag

        public void addConfigInfo4Tag​(ConfigInfo configInfo,
                                      String tag,
                                      String srcIp,
                                      String srcUser,
                                      Timestamp time,
                                      boolean notify)
        添加普通配置信息,发布数据变更事件
      • updateConfigInfo4Beta

        public void updateConfigInfo4Beta​(ConfigInfo configInfo,
                                          String srcIp,
                                          String srcUser,
                                          Timestamp time,
                                          boolean notify)
        更新配置信息
      • insertOrUpdateSub

        public void insertOrUpdateSub​(SubInfo subInfo)
        写入主表,插入或更新
      • removeConfigInfo

        public void removeConfigInfo​(String dataId,
                                     String group,
                                     String tenant,
                                     String srcIp,
                                     String srcUser)
        删除配置信息, 物理删除
      • removeConfigInfo4Beta

        public void removeConfigInfo4Beta​(String dataId,
                                          String group,
                                          String tenant)
        删除beta配置信息, 物理删除
      • addAggrConfigInfo

        public boolean addAggrConfigInfo​(String dataId,
                                         String group,
                                         String tenant,
                                         String datumId,
                                         String appName,
                                         String content)
        增加聚合前数据到数据库, select -> update or insert
      • removeSingleAggrConfigInfo

        public void removeSingleAggrConfigInfo​(String dataId,
                                               String group,
                                               String tenant,
                                               String datumId)
        删除单条聚合前数据
      • removeAggrConfigInfo

        public void removeAggrConfigInfo​(String dataId,
                                         String group,
                                         String tenant)
        删除一个dataId下面所有的聚合前数据
      • batchRemoveAggr

        public boolean batchRemoveAggr​(String dataId,
                                       String group,
                                       String tenant,
                                       List<String> datumList)
        批量删除聚合数据,需要指定datum的列表
        Parameters:
        dataId -
        group -
        datumList -
      • removeConfigHistory

        public void removeConfigHistory​(Timestamp startTime,
                                        int limitSize)
        删除startTime前的数据
      • findConfigHistoryCountByTime

        public int findConfigHistoryCountByTime​(Timestamp startTime)
        获取指定时间前配置条数
      • findConfigMaxId

        public long findConfigMaxId()
        获取最大maxId
      • batchPublishAggr

        public boolean batchPublishAggr​(String dataId,
                                        String group,
                                        String tenant,
                                        Map<String,​String> datumMap,
                                        String appName)
        批量添加或者更新数据.事务过程中出现任何异常都会强制抛出TransactionSystemException
        Parameters:
        dataId -
        group -
        datumMap -
        Returns:
      • replaceAggr

        public boolean replaceAggr​(String dataId,
                                   String group,
                                   String tenant,
                                   Map<String,​String> datumMap,
                                   String appName)
        批量替换,先全部删除聚合表中指定DataID+Group的数据,再插入数据. 事务过程中出现任何异常都会强制抛出TransactionSystemException
        Parameters:
        dataId -
        group -
        datumMap -
        Returns:
      • findAllDataIdAndGroup

        @Deprecated
        public List<ConfigInfo> findAllDataIdAndGroup()
        Deprecated.
        查找所有的dataId和group。保证不返回NULL。
      • findConfigInfoBase

        public ConfigInfoBase findConfigInfoBase​(String dataId,
                                                 String group)
        根据dataId和group查询配置信息
      • findConfigInfo

        public ConfigInfo findConfigInfo​(long id)
        根据数据库主键ID查询配置信息
        Parameters:
        id -
        Returns:
      • findConfigInfoByDataId

        public Page<ConfigInfo> findConfigInfoByDataId​(int pageNo,
                                                       int pageSize,
                                                       String dataId,
                                                       String tenant)
        根据dataId查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        dataId -
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoByDataIdAndApp

        public Page<ConfigInfo> findConfigInfoByDataIdAndApp​(int pageNo,
                                                             int pageSize,
                                                             String dataId,
                                                             String tenant,
                                                             String appName)
        根据dataId查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        dataId -
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoBaseByDataId

        public Page<ConfigInfoBase> findConfigInfoBaseByDataId​(int pageNo,
                                                               int pageSize,
                                                               String dataId)
        根据dataId查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        dataId -
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoByGroup

        public Page<ConfigInfo> findConfigInfoByGroup​(int pageNo,
                                                      int pageSize,
                                                      String group,
                                                      String tenant)
        根据group查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        group -
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoByGroupAndApp

        public Page<ConfigInfo> findConfigInfoByGroupAndApp​(int pageNo,
                                                            int pageSize,
                                                            String group,
                                                            String tenant,
                                                            String appName)
        根据group查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        group -
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoByApp

        public Page<ConfigInfo> findConfigInfoByApp​(int pageNo,
                                                    int pageSize,
                                                    String tenant,
                                                    String appName)
        根据group查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoBaseByGroup

        public Page<ConfigInfoBase> findConfigInfoBaseByGroup​(int pageNo,
                                                              int pageSize,
                                                              String group)
        根据group查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        group -
        Returns:
        ConfigInfo对象的集合
      • configInfoCount

        public int configInfoCount()
        返回配置项个数
      • configInfoCount

        public int configInfoCount​(String tenant)
        返回配置项个数
      • configInfoBetaCount

        public int configInfoBetaCount()
        返回beta配置项个数
      • configInfoTagCount

        public int configInfoTagCount()
        返回beta配置项个数
      • getTenantIdList

        public List<String> getTenantIdList​(int page,
                                            int pageSize)
      • getGroupIdList

        public List<String> getGroupIdList​(int page,
                                           int pageSize)
      • aggrConfigInfoCount

        public int aggrConfigInfoCount​(String dataId,
                                       String group,
                                       String tenant)
      • findAllConfigInfo

        public Page<ConfigInfo> findAllConfigInfo​(int pageNo,
                                                  int pageSize,
                                                  String tenant)
        分页查询所有的配置信息
        Parameters:
        pageNo - 页码(从1开始)
        pageSize - 每页大小(必须大于0)
        Returns:
        ConfigInfo对象的集合
      • findAllConfigKey

        public Page<ConfigKey> findAllConfigKey​(int pageNo,
                                                int pageSize,
                                                String tenant)
        分页查询所有的配置信息
        Parameters:
        pageNo - 页码(从1开始)
        pageSize - 每页大小(必须大于0)
        Returns:
        ConfigInfo对象的集合
      • findAllConfigInfoBase

        @Deprecated
        public Page<ConfigInfoBase> findAllConfigInfoBase​(int pageNo,
                                                          int pageSize)
        Deprecated.
        分页查询所有的配置信息
        Parameters:
        pageNo - 页码(从1开始)
        pageSize - 每页大小(必须大于0)
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoByBatch

        public List<ConfigInfo> findConfigInfoByBatch​(List<String> dataIds,
                                                      String group,
                                                      String tenant,
                                                      int subQueryLimit)
        通过select in方式实现db记录的批量查询; subQueryLimit指定in中条件的个数,上限20
      • findConfigInfoLike

        public Page<ConfigInfo> findConfigInfoLike​(int pageNo,
                                                   int pageSize,
                                                   String dataId,
                                                   String group,
                                                   String tenant,
                                                   String appName,
                                                   String content)
        根据dataId和group模糊查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        dataId - 支持模糊查询
        group - 支持模糊查询
        tenant - 支持模糊查询
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoLike

        public Page<ConfigInfo> findConfigInfoLike​(int pageNo,
                                                   int pageSize,
                                                   ConfigKey[] configKeys,
                                                   boolean blacklist)
        根据dataId和group模糊查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        configKeys - 查询配置列表
        blacklist - 是否黑名单
        Returns:
        ConfigInfo对象的集合
      • findConfigInfoBaseLike

        public Page<ConfigInfoBase> findConfigInfoBaseLike​(int pageNo,
                                                           int pageSize,
                                                           String dataId,
                                                           String group,
                                                           String content)
                                                    throws IOException
        根据dataId和group模糊查询配置信息
        Parameters:
        pageNo - 页码(必须大于0)
        pageSize - 每页大小(必须大于0)
        dataId -
        group -
        Returns:
        ConfigInfo对象的集合
        Throws:
        IOException
      • findSingleConfigInfoAggr

        public ConfigInfoAggr findSingleConfigInfoAggr​(String dataId,
                                                       String group,
                                                       String tenant,
                                                       String datumId)
        查找聚合前的单条数据
        Parameters:
        dataId -
        group -
        datumId -
        Returns:
      • findConfigInfoAggr

        public List<ConfigInfoAggr> findConfigInfoAggr​(String dataId,
                                                       String group,
                                                       String tenant)
        查找一个dataId下面的所有聚合前的数据. 保证不返回NULL.
      • findConfigInfoAggrLike

        public Page<ConfigInfoAggr> findConfigInfoAggrLike​(int pageNo,
                                                           int pageSize,
                                                           ConfigKey[] configKeys,
                                                           boolean blacklist)
        查询符合条件的聚合数据
        Parameters:
        pageNo - pageNo
        pageSize - pageSize
        configKeys - 聚合数据条件
        blacklist - 黑名单
        Returns:
      • findDatumIdByContent

        public List<String> findDatumIdByContent​(String dataId,
                                                 String groupId,
                                                 String content)
        由datum内容查找datumId
        Parameters:
        dataId - data id
        groupId - group
        content - content
        Returns:
        datum keys
      • findChangeConfig

        public Page<PersistService.ConfigInfoWrapper> findChangeConfig​(String dataId,
                                                                       String group,
                                                                       String tenant,
                                                                       String appName,
                                                                       Timestamp startTime,
                                                                       Timestamp endTime,
                                                                       int pageNo,
                                                                       int pageSize,
                                                                       long lastMaxId)
        根据时间段和配置条件查询符合条件的配置
        Parameters:
        dataId - dataId 支持模糊
        group - dataId 支持模糊
        appName - 产品名
        startTime - 起始时间
        endTime - 截止时间
        pageNo - pageNo
        pageSize - pageSize
        Returns:
      • addConfiTagRelationAtomic

        public void addConfiTagRelationAtomic​(long configId,
                                              String tagName,
                                              String dataId,
                                              String group,
                                              String tenant)
        增加配置;数据库原子操作,最小sql动作,无业务封装
        Parameters:
        configId - id
        tagName - tag
        dataId - data id
        group - group
        tenant - tenant
      • addConfiTagsRelationAtomic

        public void addConfiTagsRelationAtomic​(long configId,
                                               String configTags,
                                               String dataId,
                                               String group,
                                               String tenant)
        增加配置;数据库原子操作,最小sql动作,无业务封装
        Parameters:
        configId - config id
        configTags - tags
        dataId - dataId
        group - group
        tenant - tenant
      • removeTagByIdAtomic

        public void removeTagByIdAtomic​(long id)
      • getConfigTagsByTenant

        public List<String> getConfigTagsByTenant​(String tenant)
      • removeConfigInfoTag

        public void removeConfigInfoTag​(String dataId,
                                        String group,
                                        String tenant,
                                        String tag,
                                        String srcIp,
                                        String srcUser)
        删除配置;数据库原子操作,最小sql动作,无业务封装
        Parameters:
        dataId - dataId
        group - group
        tenant - tenant
        tag - tag
        srcIp - ip
        srcUser - user
      • findConfigInfo

        public ConfigInfo findConfigInfo​(String dataId,
                                         String group,
                                         String tenant)
        查询配置信息;数据库原子操作,最小sql动作,无业务封装
        Parameters:
        dataId - dataId
        group - group
        tenant - tenant
        Returns:
        config info
      • findConfigInfosByIds

        public List<ConfigInfo> findConfigInfosByIds​(String ids)
        Returns:
        java.util.List
      • findConfigAdvanceInfo

        public ConfigAdvanceInfo findConfigAdvanceInfo​(String dataId,
                                                       String group,
                                                       String tenant)
        查询配置信息;数据库原子操作,最小sql动作,无业务封装
        Parameters:
        dataId - dataId
        group - group
        tenant - tenant
        Returns:
        advance info
      • findConfigAllInfo

        public ConfigAllInfo findConfigAllInfo​(String dataId,
                                               String group,
                                               String tenant)
        查询配置信息;数据库原子操作,最小sql动作,无业务封装
        Parameters:
        dataId - dataId
        group - group
        tenant - tenant
        Returns:
        advance info
      • findConfigHistory

        public Page<ConfigHistoryInfo> findConfigHistory​(String dataId,
                                                         String group,
                                                         String tenant,
                                                         int pageNo,
                                                         int pageSize)
        list配置的历史变更记录
        Parameters:
        dataId - data Id
        group - group
        tenant - tenant
        pageNo - no
        pageSize - size
        Returns:
        history info
      • insertTenantInfoAtomic

        public void insertTenantInfoAtomic​(String kp,
                                           String tenantId,
                                           String tenantName,
                                           String tenantDesc,
                                           String createResoure,
                                           long time)
        insert tenant info
        Parameters:
        kp - kp
        tenantId - tenant Id
        tenantName - tenant name
        tenantDesc - tenant description
        time - time
      • updateTenantNameAtomic

        public void updateTenantNameAtomic​(String kp,
                                           String tenantId,
                                           String tenantName,
                                           String tenantDesc)
        Update tenantInfo showname
        Parameters:
        kp - kp
        tenantId - tenant Id
        tenantName - tenant name
        tenantDesc - tenant description
      • removeTenantInfoAtomic

        public void removeTenantInfoAtomic​(String kp,
                                           String tenantId)
      • isExistTable

        public boolean isExistTable​(String tableName)
      • completeMd5

        public Boolean completeMd5()
      • findAllConfigInfo4Export

        public List<ConfigAllInfo> findAllConfigInfo4Export​(String dataId,
                                                            String group,
                                                            String tenant,
                                                            String appName,
                                                            List<Long> ids)
        query all configuration information according to group, appName, tenant (for export)
        Parameters:
        group -
        Returns:
        Collection of ConfigInfo objects
      • batchInsertOrUpdate

        public Map<String,​Object> batchInsertOrUpdate​(List<ConfigAllInfo> configInfoList,
                                                            String srcUser,
                                                            String srcIp,
                                                            Map<String,​Object> configAdvanceInfo,
                                                            Timestamp time,
                                                            boolean notify,
                                                            SameConfigPolicy policy)
                                                     throws NacosException
        batch operation,insert or update the format of the returned: succCount: number of successful imports skipCount: number of import skips (only with skip for the same configs) failData: import failed data (only with abort for the same configs) skipData: data skipped at import (only with skip for the same configs)
        Throws:
        NacosException
      • tenantInfoCountByTenantId

        public int tenantInfoCountByTenantId​(String tenantId)
        query tenantInfo (namespace) existence based by tenantId
        Parameters:
        tenantId -
        Returns:
        count by tenantId