搭建网站需要哪些步骤,晋江论坛手机版,wordpress怎么备份数据库,模板出售网站源码最近考虑项目在不同环境下配置的切换#xff0c;使用profile注解搭配PropertyPlaceholderConfigurer实现对配置文件的切换#xff0c;简单写了个demo记录下实现。
基本知识介绍
Profile
Profile通过对bean进行修饰#xff0c;来限定spring在bean管理时的初始化情况#…最近考虑项目在不同环境下配置的切换使用profile注解搭配PropertyPlaceholderConfigurer实现对配置文件的切换简单写了个demo记录下实现。
基本知识介绍
Profile
Profile通过对bean进行修饰来限定spring在bean管理时的初始化情况只有环境中激活的profile状态和修饰的value值对应时该bean才会被顺利加载并管理。
PropertyPlaceholderConfigurer
PropertyPlaceholderConfigurer是PlaceholderConfigurerSupport的实现类是spring提供的一个解析yml或properties配置文件并将对应的值进行映射通过${}形式进行调用的配置读取类。举例来说配置文件中akb.num48那么在bean或配置文件中使用${akb.num}即可获取配置的值48。
简单实现
profile修饰的bean实例在不同环境下的切换
首先定义bean接口与default、dev、prob三种情况下的bean。 接口 DeafultProfileBean
Component
public interface DefaultProfileBean {String getInfo();
}default bean ProfileBeanDefault
Profile(default)
Component
public class ProfileBeanDefault implements DefaultProfileBean{Overridepublic String getInfo() {return 这是default状态下的bean;}
}dev bean ProfileBeanDev
Profile(dev)
Component
public class ProfileBeanDev implements DefaultProfileBean{Overridepublic String getInfo(){return 这是dev环境使用的bean;
}
}dev bean ProfileBeanProd
Profile(prod)
Component
public class ProfileBeanProd implements DefaultProfileBean{Overridepublic String getInfo() {return 这是prod环境使用的bean;
}
}加载上下文并输出加载的bean结果 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext();// 设置profile环境context.getEnvironment().setActiveProfiles(dev);context.scan(com.huiluczP);context.refresh();System.out.println(loading success);DefaultProfileBean bean context.getBean(DefaultProfileBean.class);System.out.println(bean.getInfo());切换profile环境后的不同输出结果 可以看出Profile注解生效了。
配置类和配置文件
SpringConfigure配置类
Configuration
public class SpringConfigure {BeanProfile(default)// 默认状态配置加载类public PropertyPlaceholderConfigurer defaultConfig(){PropertyPlaceholderConfigurer ppc new PropertyPlaceholderConfigurer();Resource resource new ClassPathResource(config/default.properties);ppc.setLocation(resource);return ppc;}BeanProfile(dev)// dev状态配置加载类public PropertyPlaceholderConfigurer devConfig(){PropertyPlaceholderConfigurer ppc new PropertyPlaceholderConfigurer();Resource resource new ClassPathResource(config/dev.properties);ppc.setLocation(resource);return ppc;}BeanProfile(prod)// prod状态配置加载类public PropertyPlaceholderConfigurer prodConfig(){PropertyPlaceholderConfigurer ppc new PropertyPlaceholderConfigurer();Resource resource new ClassPathResource(config/prod.properties);ppc.setLocation(resource);return ppc;}}管理了三个PropertyPlaceholderConfigurer类型的配置读取类分别对应不同的profile状态。通过ClassPathResource读取对应的配置文件如果用xml配置文件进行PropertyPlaceholderConfigurer bean的管理直接增加property location将value设置为对应的配置文件地址即可。
三个不同的配置文件内容
default.properties
config.infodefault informationdev.properties
config.infodev informationprod.properties
config.infoprod information配置获取测试接口和bean类
public interface DefaultConfigBean {String getConfigInfo();
}
Component
public class DifferentConfigBean implements DefaultConfigBean{Value(${config.info})private String config;Overridepublic String getConfigInfo() {return 当前环境下的config信息为 config;}
}通过${config.info}实现对配置文件的获取。
加载上下文进行处理 AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext();// 设置profile环境context.getEnvironment().setActiveProfiles(prod);context.scan(com.huiluczP);context.refresh();DefaultConfigBean configBean context.getBean(DefaultConfigBean.class);System.out.println(configBean.getConfigInfo());切换环境输出结果 profile激活
特别的说明下对项目profile环境怎么进行设置以对profile进行激活。没有特别指定时默认调用default修饰的bean。
直接上下文设定也就是上文中使用的对enviroment中的activeProfile进行设置即可。web项目中可以在web.xml中设置全局的变量
context-paramparam-namespring.profiles.alive/param-nameparam-valuedev/param-value
/context-param如果是springMVC管理可以在DispatcherServlet的配置中增加init-param
init-paramparam-namespring.profiles.alive/param-nameparam-valuedev/param-value
/init-param可以在jvm的运行属性中设置tomcat等服务器的启动option也可设置jvm属性。
-Dspring.profiles.activedev对测试类使用注解ActiveProfiles进行修饰value设置为对应的环境。
总结
简单记录了一下spring profile和PropertyPlaceholderConfigurers类实现不同环境下的不同配置文件加载的方法在分支中进行快速切换还是挺方便的而且PropertyPlaceholderConfigurer映射的配置在spring读取其他的配置文件时也可以通过${}进行读取这样不同的环境配置文件只需要一份并将其中需要变动的部分用PropertyPlaceholderConfigurer进行管理即可。