public static List<URL> parseConfigurators(String rawConfig) {
        // compatible url JsonArray, such as [ "override://xxx", "override://xxx" ]
        List<URL> compatibleUrls = parseJsonArray(rawConfig);
        if (CollectionUtils.isNotEmpty(compatibleUrls)) {
            return compatibleUrls;
        }

        List<URL> urls = new ArrayList<>();
        ConfiguratorConfig configuratorConfig = parseObject(rawConfig);

        String scope = configuratorConfig.getScope();
        List<ConfigItem> items = configuratorConfig.getConfigs();

        if (ConfiguratorConfig.SCOPE_APPLICATION.equals(scope)) {
            items.forEach(item -> urls.addAll(appItemToUrls(item, configuratorConfig)));
        } else {
            // service scope by default.
            items.forEach(item -> urls.addAll(serviceItemToUrls(item, configuratorConfig)));
        }

        return urls;
    }
@Test
    void parseProviderConfigurationV3Conflict() throws IOException {
        try (InputStream yamlStream = this.getClass().getResourceAsStream("/ConfiguratorV3Duplicate.yml")) {
            List<URL> urls = ConfigParser.parseConfigurators(streamToString(yamlStream));
            Assertions.assertNotNull(urls);
            Assertions.assertEquals(1, urls.size());
            URL url = urls.get(0);
            Assertions.assertEquals("10.0.0.1:20880", url.getAddress());
            Assertions.assertEquals("DemoService", url.getServiceInterface());
            Assertions.assertEquals(200, url.getParameter(WEIGHT_KEY, 0));
            Assertions.assertEquals("demo-provider", url.getApplication());

            URL matchURL = URL.valueOf("dubbo://10.0.0.1:20880/DemoService?match_key1=value1");
            URL notMatchURL =
                    URL.valueOf("dubbo://10.0.0.1:20880/DemoService?match_key1=value_not_match"); // key not match

            ConditionMatch matcher = (ConditionMatch) url.getAttribute(MATCH_CONDITION);
            Assertions.assertTrue(matcher.isMatch(matchURL.getAddress(), matchURL));
            Assertions.assertFalse(matcher.isMatch(notMatchURL.getAddress(), notMatchURL));
        }
    }