通用配置中心——普通SSM项目

自己研究的一个通用配置中心方案,看看你的项目适用不

1.问题描述

一个项目很多子项目,每个项目有很多通用配置如数据源、Redis集群、ZK、dubbo、日志等

如果每个子项目分别维护这些配置,在修改这些通用配置会很麻烦,还可能漏掉

2.优化方案

使用一个通用properties来管理这些通用配置,将其放到一个指定服务器上,服务启动时用spring的PropertyPlaceholderConfigurer通过http方式读取该properties文件实例化一个配置bean到spring,在xml中通过${XXXX}引用配置或Java代码中@Value("${XXX}")来引用配置

3.这样做的好处

a、之后要修改任一通用配置,只需要修改通用properties即可,还可更快进行故障切换;

b、更好的保证配置的准确性及整体一致性;

c、使非通用properties配置文件更简洁;

4.

1)将通用properties放到一个服务器如Nginx主机,path为 /nginx/config-center/common-dubbo-config-center.properties

2)配置Nginx,在监听XX02端口这个server下增加一个location

location =/common-dubbo-config-center.properties {

       allow 111.112.113.0/24; #只允许111.112.113网段IP访问

      deny  all;

                root   /nginx/config-center ;  

        }

3)读取配置到spring

4)在XML或Java代码中使用配置

XML:

<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.pool.maxTotal}"/>
        <property name="maxIdle" value="${redis.pool.maxIdle}"/>
        <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}"/>
        <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}"/>
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
    </bean>

JAVA:


@Component
@Configuration
public class EsClientConfiguration {
@Value("${clusterName}")
private String clusterName;
@Value("${userName}")
private String userName;
@Value("${userPwd}")
private String userPwd;
@Value("${clusterNodes}")
private String clusterNodes;
@Value("${caPath}")
private String caPath;
@Value("${esKey}")
private String esKey;
@Value("${certificate}")
private String certificate;
@Value("${SSLflag:true}")
private boolean SSLflag;


//原生API操作ES的对象
@Bean
@Lazy
public TransportClient transportClient() throws UnknownHostException {
    Settings settings = null;
			if (SSLflag) {
				settings = Settings.builder()
                        .put("cluster.name", clusterName)
						.put("xpack.security.user", userName + ":" + userPwd)
						.put("xpack.ssl.certificate_authorities", caPath)
						.put("xpack.ssl.key", esKey)
                        .put("xpack.ssl.certificate",certificate )
						.put("xpack.security.transport.ssl.enabled", "true").build();

			} else {
				settings = Settings.builder().put("cluster.name", clusterName)
						.put("xpack.security.user", userName + ":" + userPwd)
						.put("xpack.security.transport.ssl.enabled", "false").build();
			}

	TransportClient client = new PreBuiltXPackTransportClient(settings);
    String[] ip_port = clusterNodes.split(",");
    for (String s : ip_port) {
        String[] split = s.split(":");
        client.addTransportAddress(new TransportAddress(InetAddress.getByName(split[0]), Integer.parseInt(split[1])));
    }
    return client;
    }
//spring data 包装的API操作ES的对象(推荐使用)
    @Bean
	@Lazy
	public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException {
	System.out.println("                       .::::.");
	System.out.println("                     .::::::::.");
	System.out.println("                    :::::::::::");
	System.out.println("                 ..:::::::::::'");
	System.out.println("              '::::::::::::'");
	System.out.println("                .::::::::::");
	System.out.println("           '::::::::::::::..");
	System.out.println("                ..::::::::::::.");
	System.out.println("              ``::::::::::::::::");
	System.out.println("               ::::``:::::::::'        .:::.");
	System.out.println("              ::::'   ':::::'       .::::::::.");
	System.out.println("            .::::'      ::::     .:::::::'::::.");
	System.out.println("          .::'        :::::.:::::::::'      ':::::.");
	System.out.println("         .::'         ::::::::::::::'         ``::::.");
	System.out.println("     ...:::           ::::::::::::'              ``::.");
	System.out.println("    ```` ':.          ':::::::::'                  ::::..");
	System.out.println("                       '.:::::'                    ':'````..");
	System.out.println("<<<<<ES><连><接><成><功>>>>>>");
	return new ElasticsearchTemplate(transportClient());

	}

}

猜你喜欢

转载自blog.csdn.net/qq_39506978/article/details/89155386