1、为什么需要使用profile?
在开发软件的时候,常常会将应用程序从一个环境迁移到另一个环境,比如在开发阶段中,某些环境相关的做法并不太适合迁移到生产环境中,甚至即便迁移过去也无法正常工作,比如数据库配置等。可以通过配置 bean profile,依据不同的环境,创建对应的bean
2、profile配置的方式
(1)在配置类中的配置
@Profile即可以在类上配置,也可以在方法上配置。通常为了方便管理和维护,将不同环境下的配置放置在一个同一个配置类中,
@Configuration
public class DataSourceConfig{
@Bean
@Profile("dev")
public DataSource devDataSource(){
....
}
@Bean
@Profile("prod")
public DataSource prodDataSource(){
....
}
}
(2)在xml中配置,也有两种方式,第一种是在根元素里面配置profile=“dev”,这就需要有几个不同的环境,就需要定义几个不同的xml。第二种方法是在根元素里面,定义一个子,然后在子中声明profile的配置
第一种:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"
profile="dev">
第二种:
<beans profile="dev">
...
</beans>
<beans profile="prod">
...
</beans>
3、那么如何激活使用哪一种环境呢
使用spring.profiles.active和spring.profiles.default,如果同时使用这两种,那么default就不起作用。在web应用中,通常选用在web.xml中
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>dev</param-value>
</context-param>
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/applicationContext.xml</param-value>
</init-param>
<init-param>
<param-name>spring.profiles.default</param-name>
<param-value>dev</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>