Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
---

- [feat: upgrade springdoc to 2.8.13](https://github.com/Tencent/spring-cloud-tencent/pull/1738)
- [refactor:optimize auto configuration.](https://github.com/Tencent/spring-cloud-tencent/pull/1739)
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,7 @@
import com.tencent.cloud.polaris.auth.filter.AuthReactiveFilter;
import com.tencent.cloud.polaris.auth.filter.AuthServletFilter;
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration;

import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
Expand All @@ -43,7 +41,6 @@
* @author Haotian Zhang
*/
@Configuration(proxyBeanMethods = false)
@AutoConfigureAfter(PolarisContextAutoConfiguration.class)
public class PolarisAuthAutoConfiguration {

/**
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,21 @@

package com.tencent.cloud.polaris.config;

import java.util.List;

import com.tencent.cloud.polaris.config.adapter.AffectedConfigurationPropertiesRebinder;
import com.tencent.cloud.polaris.config.adapter.PolarisConfigFileLocator;
import com.tencent.cloud.polaris.config.condition.ConditionalOnReflectRefreshType;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import com.tencent.cloud.polaris.config.config.PolarisCryptoConfigProperties;
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
import com.tencent.cloud.polaris.context.config.PolarisContextAutoConfiguration;
import com.tencent.cloud.polaris.context.PolarisConfigModifier;
import com.tencent.cloud.polaris.context.config.PolarisContextProperties;
import com.tencent.cloud.polaris.context.config.PolarisContextPropertiesAutoConfiguration;
import com.tencent.polaris.api.exception.PolarisException;
import com.tencent.polaris.configuration.api.core.ConfigFileService;
import com.tencent.polaris.configuration.factory.ConfigFileServiceFactory;

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.SearchStrategy;
import org.springframework.cloud.context.properties.ConfigurationPropertiesBeans;
Expand All @@ -45,27 +49,37 @@
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnPolarisConfigEnabled
@Import(PolarisContextAutoConfiguration.class)
@Import(PolarisContextPropertiesAutoConfiguration.class)
public class PolarisConfigBootstrapAutoConfiguration {

@Bean
@ConditionalOnMissingBean
public PolarisConfigProperties polarisProperties() {
return new PolarisConfigProperties();
}

@Bean
@ConditionalOnMissingBean
public PolarisCryptoConfigProperties polarisCryptoConfigProperties() {
return new PolarisCryptoConfigProperties();
}

@Bean
@ConditionalOnMissingBean
public PolarisConfigSDKContextManager polarisConfigSDKContextManager(PolarisContextProperties properties, Environment environment, ObjectProvider<List<PolarisConfigModifier>> modifierListProvider) throws PolarisException {
return new PolarisConfigSDKContextManager(properties, environment, modifierListProvider);
}

@Bean
@ConditionalOnConnectRemoteServerEnabled
public ConfigFileService configFileService(PolarisSDKContextManager polarisSDKContextManager) {
return ConfigFileServiceFactory.createConfigFileService(polarisSDKContextManager.getConfigSDKContext());
@ConditionalOnMissingBean
public ConfigFileService configFileService(PolarisConfigSDKContextManager polarisConfigSDKContextManager) {
return ConfigFileServiceFactory.createConfigFileService(polarisConfigSDKContextManager.getConfigSDKContext());
}

@Bean
@ConditionalOnConnectRemoteServerEnabled
@ConditionalOnMissingBean
public PolarisConfigFileLocator polarisConfigFileLocator(
PolarisConfigProperties polarisConfigProperties,
PolarisContextProperties polarisContextProperties,
Expand All @@ -77,6 +91,7 @@ public PolarisConfigFileLocator polarisConfigFileLocator(

@Bean
@ConditionalOnConnectRemoteServerEnabled
@ConditionalOnMissingBean
public ConfigurationModifier configurationModifier(PolarisConfigProperties polarisConfigProperties,
PolarisCryptoConfigProperties polarisCryptoConfigProperties,
PolarisContextProperties polarisContextProperties) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
/*
* Tencent is pleased to support the open source community by making spring-cloud-tencent available.
*
* Copyright (C) 2021 Tencent. All rights reserved.
*
* Licensed under the BSD 3-Clause License (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*
* Unless required by applicable law or agreed to in writing, software distributed
* under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*/

package com.tencent.cloud.polaris.config;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import com.tencent.cloud.polaris.context.PolarisConfigModifier;
import com.tencent.cloud.polaris.context.PolarisConfigurationConfigModifier;
import com.tencent.cloud.polaris.context.config.PolarisContextProperties;
import com.tencent.polaris.api.config.Configuration;
import com.tencent.polaris.api.utils.CollectionUtils;
import com.tencent.polaris.client.api.SDKContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.ObjectProvider;
import org.springframework.core.env.Environment;

/**
* Manager for static Polaris Config SDK context.
*
* @author Haotian Zhang
*/
public class PolarisConfigSDKContextManager {

private static final Logger LOG = LoggerFactory.getLogger(PolarisConfigSDKContextManager.class);

private volatile static SDKContext configSDKContext;
private final PolarisContextProperties properties;
private final Environment environment;
private final ObjectProvider<List<PolarisConfigModifier>> modifierListProvider;

public PolarisConfigSDKContextManager(PolarisContextProperties properties, Environment environment, ObjectProvider<List<PolarisConfigModifier>> modifierListProvider) {
this.properties = properties;
this.environment = environment;
this.modifierListProvider = modifierListProvider;
}

/**
* Used for config data.
*/
public static SDKContext innerGetConfigSDKContext() {
if (configSDKContext == null) {
throw new IllegalArgumentException("configSDKContext is not initialized.");
}
return configSDKContext;
}

public static void innerConfigDestroy() {
try {
if (Objects.nonNull(configSDKContext)) {
configSDKContext.destroy();
configSDKContext = null;
}
LOG.info("Polaris SDK config context is destroyed.");
}
catch (Throwable throwable) {
LOG.info("Polaris SDK config context is destroyed failed.", throwable);
}
}

public SDKContext getConfigSDKContext() {
initConfig();
return configSDKContext;
}

/**
* Used for config data.
*/
public static void setConfigSDKContext(SDKContext context) {
if (configSDKContext == null) {
configSDKContext = context;
// add shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread(PolarisConfigSDKContextManager::innerConfigDestroy));
LOG.info("create Polaris config SDK context successfully.");
}
}

public void initConfig() {
// get modifiers for configuration.
List<PolarisConfigModifier> modifierList = modifierListProvider.getIfAvailable(ArrayList::new);
List<PolarisConfigModifier> configModifierList = new ArrayList<>();
for (PolarisConfigModifier modifier : modifierList) {
if (modifier instanceof PolarisConfigurationConfigModifier) {
configModifierList.add(modifier);
}
}
if (null == configSDKContext && CollectionUtils.isNotEmpty(configModifierList)) {
try {
// init config SDKContext
Configuration configuration = properties.configuration(configModifierList,
() -> environment.getProperty("spring.cloud.client.ip-address"),
() -> environment.getProperty("spring.cloud.polaris.local-port", Integer.class, 0));
configSDKContext = SDKContext.initContextByConfig(configuration);
configSDKContext.init();

// add shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread(PolarisConfigSDKContextManager::innerConfigDestroy));
LOG.info("create Polaris config SDK context successfully. properties: {}, configuration: {}", properties, configuration);
}
catch (Throwable throwable) {
LOG.error("create Polaris config SDK context failed. properties: {}, ", properties, throwable);
throw throwable;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;

import com.tencent.cloud.polaris.config.PolarisConfigSDKContextManager;
import com.tencent.cloud.polaris.config.adapter.PolarisConfigCustomExtensionLayer;
import com.tencent.cloud.polaris.config.adapter.PolarisConfigFilePuller;
import com.tencent.cloud.polaris.config.adapter.PolarisServiceLoaderUtil;
import com.tencent.cloud.polaris.config.config.ConfigFileGroup;
import com.tencent.cloud.polaris.config.config.PolarisConfigProperties;
import com.tencent.cloud.polaris.context.PolarisSDKContextManager;
import com.tencent.polaris.client.api.SDKContext;
import com.tencent.polaris.configuration.api.core.ConfigFileService;
import com.tencent.polaris.configuration.factory.ConfigFileServiceFactory;
Expand Down Expand Up @@ -97,7 +97,7 @@ private CompositePropertySource locate(ConfigurableBootstrapContext bootstrapCon
PolarisConfigDataResource resource) {
CompositePropertySource compositePropertySource = new CompositePropertySource(
POLARIS_CONFIG_PROPERTY_SOURCE_NAME);
SDKContext sdkContext = PolarisSDKContextManager.innerGetConfigSDKContext();
SDKContext sdkContext = PolarisConfigSDKContextManager.innerGetConfigSDKContext();
if (null == this.configFileService) {
this.configFileService = ConfigFileServiceFactory.createConfigFileService(sdkContext);
}
Expand Down
Loading