/* * 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.server.spring.listener; import io.seata.common.util.CollectionUtils; import io.seata.common.util.StringUtils; import io.seata.config.ConfigurationFactory; import io.seata.config.FileConfiguration; import io.seata.config.file.FileConfig; import io.seata.server.store.StoreConfig; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.PropertiesPropertySource; import java.util.*; import static io.seata.common.ConfigurationKeys.*; @Order(Ordered.HIGHEST_PRECEDENCE) public class SeataPropertiesLoader implements ApplicationContextInitializer { List prefixList = Arrays.asList(FILE_ROOT_PREFIX_CONFIG, FILE_ROOT_PREFIX_REGISTRY, SERVER_PREFIX, STORE_PREFIX, METRICS_PREFIX, TRANSPORT_PREFIX); @Override public void initialize(ConfigurableApplicationContext applicationContext) { ConfigurableEnvironment environment = applicationContext.getEnvironment(); FileConfiguration configuration = ConfigurationFactory.getOriginFileInstanceRegistry(); FileConfig fileConfig = configuration.getFileConfig(); Map configs = fileConfig.getAllConfig(); if (CollectionUtils.isNotEmpty(configs)) { Optional originFileInstance = ConfigurationFactory.getOriginFileInstance(); originFileInstance .ifPresent(fileConfiguration -> configs.putAll(fileConfiguration.getFileConfig().getAllConfig())); Properties properties = new Properties(); configs.forEach((k, v) -> { if (v instanceof String) { if (StringUtils.isEmpty((String)v)) { return; } } // Convert the configuration name to the configuration name under Spring Boot if (prefixList.stream().anyMatch(k::startsWith)) { properties.put(SEATA_FILE_PREFIX_ROOT_CONFIG + k, v); } }); environment.getPropertySources().addLast(new PropertiesPropertySource("seataOldConfig", properties)); } // Load by priority System.setProperty("sessionMode", StoreConfig.getSessionMode().getName()); System.setProperty("lockMode", StoreConfig.getLockMode().getName()); } }