获取配置文件

1,070 阅读1分钟

1

ClassPathResource resource = new ClassPathResource("xxx.properties"); Properties properties = new Properties(); properties.load( resource.getInputStream());

2

@ConfigurationProperties(prefix = "project") @PropertySource(value = "classpath:config/config.properties")

3

DynamicStringProperty 动态属性

4 Example

package com.peterwanghao.samples.java.archaius;

import static com.netflix.config.ConfigurationManager.isConfigurationInstalled;

import java.io.IOException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Component;

import com.netflix.config.ConfigurationManager; import com.netflix.config.DynamicConfiguration; import com.netflix.config.DynamicPropertyFactory; import com.netflix.config.DynamicStringProperty; import com.netflix.config.FixedDelayPollingScheduler; import com.netflix.config.PolledConfigurationSource; import com.netflix.config.jmx.ConfigJMXManager; import com.netflix.config.sources.JDBCConfigurationSource;

/**

  • @ClassName: ApplicationConfig
  • @Description:一个简单的Netflix Archaius例子,从指定的路径下读配置,级联配置和从关系型库里读配置。
  • @author:
  • @version V1.0

*/ @Component @Qualifier("applicationConfig") public class ApplicationConfig extends Thread { static { System.setProperty("archaius.configurationSource.defaultFileName", "customConfig.properties"); }

private final DataSource dataSource;

@Autowired
public ApplicationConfig(DataSource dataSource) {
	this.dataSource = dataSource;
	cascadeDefaultConfiguration();
	DynamicConfiguration jdbcSource = installJdbcSource();
	registerMBean(jdbcSource);
}

public String getStringProperty(String key, String defaultValue) {
	final DynamicStringProperty property = DynamicPropertyFactory.getInstance().getStringProperty(key,
			defaultValue);
	return property.get();
}

@Override
public void run() {
	while (true) {
		try {
			sleep(100);
		} catch (InterruptedException e) {
			throw new RuntimeException(e);
		}

	}
}

private void registerMBean(DynamicConfiguration jdbcSource) {
	setDaemon(false);
	ConfigJMXManager.registerConfigMbean(jdbcSource);
}

private void cascadeDefaultConfiguration() {
	try {
		ConfigurationManager.loadCascadedPropertiesFromResources("customConfig");
	} catch (IOException e) {
		e.printStackTrace();
	}
}

private DynamicConfiguration installJdbcSource() {
	if (!isConfigurationInstalled()) {
		PolledConfigurationSource source = new JDBCConfigurationSource(dataSource,
				"select distinct property_key, property_value from properties", "property_key", "property_value");
		DynamicConfiguration configuration = new DynamicConfiguration(source,
				new FixedDelayPollingScheduler(0, 10000, true));

		ConfigurationManager.install(configuration);
		return configuration;
	}
	return null;
}

public static void main(String[] args) {
	ApplicationContext applicationContext = new ClassPathXmlApplicationContext("archaiusContext.xml");
	ApplicationConfig applicationConfig = (ApplicationConfig) applicationContext.getBean("applicationConfig");

	applicationConfig.start();

	while (true) {
		try {
			System.out.println(applicationConfig.getStringProperty("hello.world.message", "default message"));
			System.out.println(applicationConfig.getStringProperty("cascade.property", "default message"));
			System.out.println(applicationConfig.getStringProperty("db.property", "default message"));
			sleep(3000);
			System.out.println("-----------------------");
		} catch (InterruptedException e) {
			throw new RuntimeException(e);
		}
	}
}

}