DEAD MAN CODING

FOOOLING.COM

Spring 2.5.6 手动初始化的动态配置

Jan. 11, 2016, 12:43 a.m.

试了下Spring Framework的古代版本2.5.6, 需求是动态初始化,动态加载动态配置 

动态配置放到:

1. classpath:abc/abc.properties

2. file:path/to/abc.properties

包含 abc.service.address=127.0.0.1 的配置

这两种典型情况(为了不重新打包应用就能改配置)

Spring的context是xxx-context.xml

里面包含了例如 ${abc.service.address}这种变量引用。

试了试,这么写一下就能实现动态启动一个spring并且正确加载配置。


ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "classpath:xxx-context.xml" },// 可以是多个context配置文件
            false, // refresh=false
            null);
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer(); //填充properties用
if (ConfigLoadHelper.getFilepathType(configPath)== ConfigLoadHelper.PathType.CLASSPATH){ //如果是classpath模式
    configurer.setLocation(new ClassPathResource(ConfigLoadHelper.removeFilePrefix(configPath)));
}else { //file模式
    configurer.setLocation(new FileSystemResource(ConfigLoadHelper.removeFilePrefix(configPath)));
}
((AbstractApplicationContext) ctx).addBeanFactoryPostProcessor(configurer); //比较关键
((AbstractApplicationContext) ctx).refresh(); // 启动spring
((AbstractApplicationContext) ctx).registerShutdownHook(); // shutdownhook
context=(AbstractApplicationContext)ctx;
xxxRpcService=(IXxxService)context.getBean("xxxRpcService");


友情链接