代碼裏修改spring配置(springboot同理)

 

 

package com.szkunton.product.config;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.Ordered;
import org.springframework.core.PriorityOrdered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Environment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

@Component
public class PropertySourcesProcessor implements BeanFactoryPostProcessor, EnvironmentAware, PriorityOrdered {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }

    @Override
    public void setEnvironment(Environment environment) {
        MutablePropertySources propertySources = ((ConfigurableEnvironment)environment).getPropertySources();
        String osName = environment.getProperty("os.name");
        for (PropertySource<?> propertySource : propertySources) {
            String name = propertySource.getName();
            if("applicationConfig: [classpath:/application-DEV.properties]".equals(name) && osName.startsWith("Windows")){
                LinkedHashMap source = (LinkedHashMap) propertySource.getSource();
                String jdbcUrl = source.get("spring.datasource.url").toString();
                String jdbcHost = getJdbcUrlHost(jdbcUrl);
                String db = getJdbcDb(jdbcUrl);
                Map<String,String> ipMap = new HashMap<>();
                ipMap.put("12.18.0.3","19.0.3.36");
                String url = String.format("jdbc:mysql://%s:3306/%s?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Hongkong", ipMap.get(jdbcHost), db);
                source.put("spring.datasource.url",url);
                break;
            }

        }
    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;
    }

    /**
     * 獲取jdbcUrl 上的host
     */
    private String getJdbcUrlHost(String jdbcUrl){
        int start = "jdbc:mysql://".length();
        int end = jdbcUrl.indexOf(":3306");
        return jdbcUrl.substring(start, end);
    }
    /**
     * 獲取jdbcUrl 上的db
     */
    private String getJdbcDb(String jdbcUrl){
        int start = jdbcUrl.indexOf("3306/") + 5;
        int end = jdbcUrl.indexOf("?");
        return jdbcUrl.substring(start, end);
    }
}
相關文章
相關標籤/搜索