zoukankan      html  css  js  c++  java
  • 携程apollo分布式配置中心

    原理 :

    apollo的部署

     jdk 要求8以上

    mysql 5.7以上

     

     

     

     执行build.sh 这样就把configService,adminService 打包到对应的target下面

     把这个放到linux下面执行解压出来 执行scripts 目录下面的start.sh

    config里面是配置信息连接数据库的配置信息

    protal项目里面要配置连接数据库的配置

     

    这个文件是连接数据库的配置信息

    客户端连接配置中心

    <dependency>
                <groupId>com.ctrip.framework.apollo</groupId>
                <artifactId>apollo-client</artifactId>
                <version>1.1.0</version>
            </dependency>

    这个jar包已经上传到了中央仓库可以直接用

     

     配置多个namespace

    动态改变数据源

    package com.liuchao.mayikttest.config;
    
    import com.ctrip.framework.apollo.Config;
    import com.ctrip.framework.apollo.model.ConfigChangeEvent;
    import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
    import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
    import com.zaxxer.hikari.HikariDataSource;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
    
    import javax.sql.DataSource;
    import java.util.Collections;
    import java.util.Set;
    
    @Configuration
    @EnableConfigurationProperties(DataSourceProperties.class)
    public class DataSourceConfiguration {
    
        Logger logger = LoggerFactory.getLogger(getClass());
    
        private final static String DATASOURCE_TAG = "db";
    
        @Autowired
        ApplicationContext context;
    
        @ApolloConfig
        Config config;
    
        @Bean("dataSource")
        public DynamicDataSource dynamicDataSource() {
            DynamicDataSource source = new DynamicDataSource();
            source.setTargetDataSources(Collections.singletonMap(DATASOURCE_TAG, dataSource()));
            return source;
        }
        @ApolloConfigChangeListener
        public void onChange(ConfigChangeEvent changeEvent) {
            Set<String> strings = changeEvent.changedKeys();
            if (strings.contains("spring.datasource.primary.jdbc-url") ||
                    strings.contains("spring.datasource.primary.username") ||
                strings.contains("spring.datasource.primary.password")) {
                DynamicDataSource source = context.getBean(DynamicDataSource.class);
                source.setTargetDataSources(Collections.singletonMap(DATASOURCE_TAG, dataSource()));
                source.afterPropertiesSet();
                logger.info("动态切换数据源为:{}", config.getProperty("spring.datasource.url", ""));
            }
        }
        public DataSource dataSource() {
            HikariDataSource dataSource = new HikariDataSource();
            dataSource.setJdbcUrl(config.getProperty("spring.datasource.primary.jdbc-url", ""));
            dataSource.setUsername(config.getProperty("spring.datasource.primary.username", ""));
            dataSource.setPassword(config.getProperty("spring.datasource.primary.password", ""));
            return dataSource;
        }
        class DynamicDataSource extends AbstractRoutingDataSource {
            @Override
            protected Object determineCurrentLookupKey() { return DATASOURCE_TAG; }
        }
    }

    修改部门信息
    
    
    
     
  • 相关阅读:
    Android零基础入门第22节:ImageView的属性和方法大全
    Android零基础入门第21节:ToggleButton和Switch使用大全
    Android零基础入门第20节:CheckBox和RadioButton使用大全
    Android零基础入门第19节:Button使用详解
    Android零基础入门第18节:EditText的属性和使用方法
    Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全
    Android零基础入门第16节:Android用户界面开发概述
    Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航
    Android零基础入门第14节:使用高速Genymotion,跨入火箭时代
    <bean> 中的单例 和 原型 scope="singleton" //单例 scope="prototype" //原型
  • 原文地址:https://www.cnblogs.com/dkws/p/12083902.html
Copyright © 2011-2022 走看看