实现spring mvc 的java config 加载不同配置文件
2018-01-13 19:20
453 查看
需要配置一个spring 启动时的事件监听器.
SpringRootAppInitListener.java配置类
/** * spring 根容器启动时的监听事件 * * @return ApplicationContextInitializer<?>[] */ @Override protected ApplicationContextInitializer<?>[] getRootApplicationContextInitializers() { SpringRootAppInitListener springRootAppInitListener = new SpringRootAppInitListener(); return new ApplicationContextInitializer[]{springRootAppInitListener}; }
实现方式
public class SpringRootAppInitListener implements ApplicationContextInitializer { private static final Logger logger = LoggerFactory.getLogger(SpringRootAppInitListener.class); private static final String DEFAULT_CONFIG_PREFIX = "application"; private static final String DEFAULT_CONFIG_SUFFIX = ".properties"; private static final String DEFAULT_CONFIG_DELIMITE = "-"; private static final String DEFAULT_CONFIG_KEY = "spring.active.profile"; @Override public void initialize(ConfigurableApplicationContext applicationContext) { MutablePropertySources sources = applicationContext.getEnvironment().getPropertySources(); //加载默认的配置文件 PropertiesLoader propertiesLoader = new PropertiesLoader(DEFAULT_CONFIG_PREFIX + DEFAULT_CONFIG_SUFFIX); Properties defaultProperties = propertiesLoader.getProperties(); //获取要加载的配置文件的后缀名称 String suFix = defaultProperties.getProperty(DEFAULT_CONFIG_KEY); //加载配置文件 Properties properties = null; if (!StringUtil.isEmpty(suFix)) { properties = propertiesLoader.loadClassPathProperties(DEFAULT_CONFIG_PREFIX + DEFAULT_CONFIG_DELIMITE + suFix + DEFAULT_CONFIG_SUFFIX); } //两个配置文件合并 propertiesLoader.mergerProperties(defaultProperties, properties); //加载到spring 的配置中去 sources.addFirst(new PropertiesPropertySource(DEFAULT_CONFIG_PREFIX, properties)); logger.info("spring root init!"); } }
PropertiesLoader.java
public class PropertiesLoader { private static Logger logger = LoggerFactory.getLogger(PropertiesLoader.class); private static ResourceLoader resourceLoader = new DefaultResourceLoader(); private final Properties properties; public PropertiesLoader(String... resourcesPaths) { properties = loadProperties(resourcesPaths); } public Properties getProperties() { return properties; } /** * 取出Property,但以System的Property优先,取不到返回空字符串. */ private String getValue(String key) { String systemProperty = System.getProperty(key); if (systemProperty != null) { return systemProperty; } if (properties.containsKey(key)) { return properties.getProperty(key); } return ""; } /** * 取出String类型的Property,但以System的Property优先,如果都为Null则抛出异常. */ public String getProperty(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return value; } /** * 取出String类型的Property,但以System的Property优先.如果都为Null则返回Default值. */ public String getProperty(String key, String defaultValue) { String value = getValue(key); return value != null ? value : defaultValue; } /** * 取出Integer类型的Property,但以System的Property优先.如果都为Null或内容错误则抛出异常. */ public Integer getInteger(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Integer.valueOf(value); } /** * 取出Integer类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容错误则抛出异常 */ public Integer getInteger(String key, Integer defaultValue) { String value = getValue(key); return value != null ? Integer.valueOf(value) : defaultValue; } /** * 取出Double类型的Property,但以System的Property优先.如果都为Null或内容错误则抛出异常. */ public Double getDouble(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Double.valueOf(value); } /** * 取出Double类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容错误则抛出异常 */ public Double getDouble(String key, Integer defaultValue) { String value = getValue(key); return value != null ? Double.valueOf(value) : defaultValue; } /** * 取出Boolean类型的Property,但以System的Property优先.如果都为Null抛出异常,如果内容不是true/false则返回false. */ public Boolean getBoolean(String key) { String value = getValue(key); if (value == null) { throw new NoSuchElementException(); } return Boolean.valueOf(value); } /** * 取出Boolean类型的Property,但以System的Property优先.如果都为Null则返回Default值,如果内容不为true/false则返回false. */ public Boolean getBoolean(String key, boolean defaultValue) { String value = getValue(key); return value != null ? Boolean.valueOf(value) : defaultValue; } /** * 载入多个文件, 文件路径使用Spring Resource格式. */ private Properties loadProperties(String... resourcesPaths) { Properties props = new Properties(); for (String location : resourcesPaths) { InputStream is = null; try { Resource resource = resourceLoader.getResource(location); is = resource.getInputStream(); props.load(is); } catch (IOException ex) { logger.info("Could not load properties from path:" + location + ", " + ex.getMessage()); } finally { IOUtils.closeQuietly(is); } } return props; } /** * 载入多个文件 classpath 文件 */ public Properties loadClassPathProperties(String resourcesPaths) { Properties props = new Properties(); Resource resource = new ClassPathResource(resourcesPaths); InputStream is = null; try { is = resource.getInputStream(); props.load(is); } catch (IOException ex) { logger.info("Could not load properties from path:" + resourcesPaths + ", " + ex.getMessage()); } finally { IOUtils.closeQuietly(is); } return props; } /** * 合并两个配置 * * @param source source * @param dist dist */ public void mergerProperties(Properties source, Properties dist) { Enumeration enum1 = source.propertyNames();//得到配置文件的名字 while (enum1.hasMoreElements()) { Object strKey = enum1.nextElement(); Object value = source.get(strKey); dist.put(strKey, value); } } }
配置方式
resources application.properties application-dev.properties application-prod.properties application-test.properties
配置方式
在application.properties 配置 spring.active.profile=dev // 激活不同的环境
相关文章推荐
- JAVA_OPTS 配置开发环境、生产环境等不同环境加载配置文件
- 在R12下加载Java Bean,配置FORMS_WEB_CONFIG_FILE文件/通过AutoConfig实现Form Server配置文件的修改
- Spring MVC 根据不同环境加载不同的配置文件
- 彻底摆脱配置文件 五(基于javaagent实现zkconfigutil对程序零侵入)
- 加载spring配置文件不同实现
- SpringMVC_v02中的总结(web项目、java项目中引入Config.properties,加载hibernate映射文件的配置的区别)
- [置顶] spring mvc 利用maven实现不同环境使用不同配置文件
- java Config配置文件读取#应用反射、工场模式
- C# winform 修改app.config配置文件的实现类
- net利用SMTP发邮件,配置文件(web.config)实现邮件发送的相关配置
- 基础Java类使用类装载器实现装载配置文件
- Java中框架的概念,以及从配置文件中读取配置信息并加载指定类
- All about JAVA 读取配置文件的方法 (这里是config.properties)
- Java中加载配置文件的集中方式,以及利用ClassLoader加载文件
- 基础Java类使用类装载器实现装载配置文件
- java应用(非web应用)中log4j.properties动态修改配置文件,无需重启,就能立即生效,如何实现?
- JFig读取配置文件,实现动态加载
- linux内核配置文件.config,基于s3c2410实现
- JAVA 实现自动监听并更新配置文件内容
- C# winform 修改app.config配置文件的实现类