Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bugfix: fix configuration center can't read configuration using SpringCloudConfig #2172

Merged
merged 31 commits into from
Feb 5, 2020
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
15b9997
fix#2104 merge SpringUtils and SpringContextProvider
xingfudeshi Jan 12, 2020
90c3902
fix bean name
xingfudeshi Jan 12, 2020
6cccd91
change bean name
xingfudeshi Jan 12, 2020
509c5ea
add UT.
xingfudeshi Jan 12, 2020
227ca61
Merge branch 'develop' into fix_2104
xingfudeshi Jan 13, 2020
52b865b
Merge branch 'develop' into fix_2104
xingfudeshi Jan 14, 2020
d68424c
Merge branch 'develop' into fix_2104
lovepoem Jan 15, 2020
093070f
Merge branch 'develop' into fix_2104
xingfudeshi Jan 15, 2020
f838633
fix reviews.
xingfudeshi Jan 15, 2020
908a9fe
Merge branch 'develop' into fix_2104
xingfudeshi Jan 16, 2020
fa9f15d
Merge branch 'develop' into fix_2104
xingfudeshi Jan 16, 2020
545a339
Merge branch 'develop' into fix_2104
xingfudeshi Jan 18, 2020
7b3af9d
Merge branch 'develop' into fix_2104
xingfudeshi Jan 19, 2020
80552cd
Merge branch 'develop' into fix_2104
xingfudeshi Jan 19, 2020
5e51bff
Merge branch 'develop' into fix_2104
xingfudeshi Jan 22, 2020
95f3491
Merge branch 'develop' into fix_2104
xingfudeshi Jan 22, 2020
36b4714
optimize UT.
xingfudeshi Jan 23, 2020
fe45388
Merge branch 'develop' into fix_2104
xingfudeshi Jan 23, 2020
bcf845d
Merge branch 'develop' into fix_2104
xingfudeshi Jan 23, 2020
108e212
Merge branch 'develop' into fix_2104
xingfudeshi Jan 23, 2020
b7eefd8
Merge branch 'develop' into fix_2104
zjinlei Jan 23, 2020
cd2199f
add copyright comments.
xingfudeshi Jan 24, 2020
076b937
fix review.
xingfudeshi Jan 24, 2020
6d95e38
fix review.
xingfudeshi Jan 24, 2020
d8de41e
fix reviews.
xingfudeshi Jan 25, 2020
5548d3a
fix constant name.
xingfudeshi Jan 25, 2020
7c95b52
avoid duplicate operations.
xingfudeshi Jan 25, 2020
5a33799
Merge branch 'develop' into fix_2104
xingfudeshi Feb 4, 2020
70f24ba
Merge branch 'develop' into fix_2104
xingfudeshi Feb 5, 2020
7ab3df1
Merge branch 'develop' into fix_2104
xingfudeshi Feb 5, 2020
936dd36
Merge branch 'develop' into fix_2104
xingfudeshi Feb 5, 2020
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
5 changes: 3 additions & 2 deletions config/seata-config-spring-cloud/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<groupId>io.seata</groupId>
<artifactId>seata-spring</artifactId>
<version>${project.parent.version}</version>
xingfudeshi marked this conversation as resolved.
Show resolved Hide resolved
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,16 @@
*/
package io.seata.config.springcloud;

import org.springframework.context.annotation.Import;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import io.seata.spring.context.SeataSpringApplicationContextHolderRegistrar;
import org.springframework.context.annotation.Import;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import({SpringContextProvider.class})
@Import({SeataSpringApplicationContextHolderRegistrar.class})
public @interface EnableSeataSpringConfig {
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import io.seata.common.util.StringUtils;
import io.seata.config.AbstractConfiguration;
import io.seata.config.ConfigurationChangeListener;
import io.seata.spring.context.SeataSpringApplicationContextHolder;
import org.springframework.context.ApplicationContext;

public class SpringCloudConfiguration extends AbstractConfiguration {

Expand Down Expand Up @@ -49,10 +51,11 @@ public String getTypeName() {

@Override
public String getConfig(String dataId, String defaultValue, long timeoutMills) {
if (null == SpringContextProvider.getEnvironment()) {
ApplicationContext applicationContext = SeataSpringApplicationContextHolder.getApplicationContext();
if (null == applicationContext || null == applicationContext.getEnvironment()) {
return defaultValue;
}
String conf = SpringContextProvider.getEnvironment().getProperty(PREFIX + dataId);
String conf = applicationContext.getEnvironment().getProperty(PREFIX + dataId);
return StringUtils.isNotBlank(conf) ? conf : defaultValue;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import io.seata.spring.annotation.GlobalTransactionScanner;
import io.seata.spring.annotation.datasource.SeataDataSourceBeanPostProcessor;
import io.seata.spring.boot.autoconfigure.properties.SeataProperties;
import io.seata.spring.boot.autoconfigure.util.SpringUtils;
import io.seata.spring.context.SeataSpringApplicationContextHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
Expand All @@ -29,6 +29,7 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;

import static io.seata.spring.context.SeataSpringApplicationContextHolderRegistrar.BEAN_NAME_SEATA_SPRING_APPLICATION_CONTEXT_HOLDER;
import static io.seata.spring.annotation.datasource.AutoDataSourceProxyRegistrar.BEAN_NAME_SEATA_DATA_SOURCE_BEAN_POST_PROCESSOR;

/**
Expand All @@ -41,13 +42,14 @@
public class SeataAutoConfiguration {
private static final Logger LOGGER = LoggerFactory.getLogger(SeataAutoConfiguration.class);

@Bean
public SpringUtils springUtils() {
return new SpringUtils();
@Bean(BEAN_NAME_SEATA_SPRING_APPLICATION_CONTEXT_HOLDER)
@ConditionalOnMissingBean(SeataSpringApplicationContextHolder.class)
public SeataSpringApplicationContextHolder applicationContextHolder() {
return new SeataSpringApplicationContextHolder();
}

@Bean
@DependsOn({"springUtils"})
@DependsOn({BEAN_NAME_SEATA_SPRING_APPLICATION_CONTEXT_HOLDER})
@ConditionalOnMissingBean(GlobalTransactionScanner.class)
public GlobalTransactionScanner globalTransactionScanner(SeataProperties seataProperties) {
if (LOGGER.isInfoEnabled()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
import io.seata.config.Configuration;
import io.seata.config.ExtConfigurationProvider;
import io.seata.spring.boot.autoconfigure.StarterConstants;
import io.seata.spring.boot.autoconfigure.util.SpringUtils;
import io.seata.spring.boot.autoconfigure.util.StringFormatUtils;
import io.seata.spring.context.SeataSpringApplicationContextHolder;
import org.apache.commons.lang.StringUtils;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
Expand Down Expand Up @@ -94,7 +94,7 @@ private Object get(String dataId) throws IllegalAccessException {
String propertySuffix = getPropertySuffix(dataId);
Class propertyClass = getPropertyClass(getPropertyPrefix(dataId));
if (null != propertyClass) {
Object propertyObject = SpringUtils.getBean(propertyClass);
Object propertyObject = SeataSpringApplicationContextHolder.getApplicationContext().getBean(propertyClass);
Optional<Field> fieldOptional = Stream.of(propertyObject.getClass().getDeclaredFields()).filter(
f -> f.getName().equalsIgnoreCase(propertySuffix)).findAny();
if (fieldOptional.isPresent()) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,47 @@
import io.seata.config.ExtConfigurationProvider;
import io.seata.config.FileConfiguration;
import io.seata.spring.boot.autoconfigure.properties.registry.RegistryRedisProperties;
import org.junit.jupiter.api.Assertions;
import io.seata.spring.context.SeataSpringApplicationContextHolder;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.mock;

/**
* @Author zhangheng
* @author zhangheng
**/
@Import(SeataSpringApplicationContextHolder.class)
@org.springframework.context.annotation.Configuration
public class RedisAutoInjectionTypeConvertTest {

private static AnnotationConfigApplicationContext applicationContex;

@BeforeAll
public static void initApplicationContext() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/redis_auto_injectio_test.xml");
applicationContext.getBeansOfType(RegistryRedisProperties.class);
public static void initContext() {
applicationContex = new AnnotationConfigApplicationContext(RedisAutoInjectionTypeConvertTest.class);
}

@Bean
RegistryRedisProperties registryRedisProperties() {
return new RegistryRedisProperties().setPassword("123456").setDb(1).setServerAddr("localhost:123456");
}

@Test
public void testRegister() throws Exception {

@Test
public void testReadConfigurationItems() {
FileConfiguration configuration = mock(FileConfiguration.class);
Configuration currentConfiguration = EnhancedServiceLoader.load(ExtConfigurationProvider.class).provide(configuration);
int db = currentConfiguration.getInt("registry.redis.db");
Assertions.assertEquals(1,db);
assertEquals(1, currentConfiguration.getInt("registry.redis.db"));
assertEquals("123456", currentConfiguration.getConfig("registry.redis.password"));
assertEquals("localhost:123456", currentConfiguration.getConfig("registry.redis.serverAddr"));
}

@AfterAll
public static void closeContext() {
applicationContex.close();
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,29 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.seata.config.springcloud;
package io.seata.spring.context;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.env.Environment;

public class SpringContextProvider implements ApplicationContextAware {
/**
* @author xingfudeshi@gmail.com
* The type application context holder
*/
public class SeataSpringApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
private static Environment environment;

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextProvider.applicationContext = applicationContext;
SpringContextProvider.environment = applicationContext.getEnvironment();
}

public static Environment getEnvironment() {
return environment;
SeataSpringApplicationContextHolder.applicationContext = applicationContext;
}

/**
* get application context
*
* @return applicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 1999-2019 Seata.io Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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 io.seata.spring.context;

import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

/**
* @author xingfudeshi@gmail.com
* The type application context registrar
*/
public class SeataSpringApplicationContextHolderRegistrar implements ImportBeanDefinitionRegistrar {
public static final String BEAN_NAME_SEATA_SPRING_APPLICATION_CONTEXT_HOLDER = "seataSpringApplicationContextHolder";

@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
if (!registry.containsBeanDefinition(BEAN_NAME_SEATA_SPRING_APPLICATION_CONTEXT_HOLDER)) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(SeataSpringApplicationContextHolder.class).getBeanDefinition();
registry.registerBeanDefinition(BEAN_NAME_SEATA_SPRING_APPLICATION_CONTEXT_HOLDER, beanDefinition);
}
}
}
Loading