Spring5 环境配置之profile

Posted 冰点IT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring5 环境配置之profile相关的知识,希望对你有一定的参考价值。

      作为开发人员我们经常会遇到不同环境下配置的切换问题,那么对于spring的配置我们又该如何去做切换呢?这将使用到Spring的 profile功能,它可以定义某个配置类或者Bean的使用环境,我们在容器加载之前只需要配置其需要激活的profile就可以完成不同环境下配置的随意切换。

1.1、使用profile定义配置类

1.1.1、基于JavaConfig

@Configuration@Profile("dev")public class DataSourceDevConfig { @Bean public DataSource embeddedDataSource() { EmbeddedDatabaseBuilder edb = new EmbeddedDatabaseBuilder(); //嵌入式数据库类型 edb.setType(EmbeddedDatabaseType.H2); return edb.build(); }}


        @Profile使用在类上时,表示该配置类只有在指定的环境下才生效。

1.1.2、基于Xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd" profile="dev"> <jdbc:embedded-database type="H2" id="embeddedDataSource"/></beans>

当我们在配置文件中这样配置时,表示该配配置文件只有在指定的环境下才生效。

1.2、使用profile定义Bean

1.2.1、基于JavaConfig

@Configurationpublic class DataSourceConfig { @Bean @Profile("dev") public DataSource embeddedDataSource() { EmbeddedDatabaseBuilder edb = new EmbeddedDatabaseBuilder(); //嵌入式数据库类型 edb.setType(EmbeddedDatabaseType.H2); return edb.build(); } @Bean @Profile("test") public DataSource basicDataSource() { BasicDataSource ads = new BasicDataSource(); ads.setDriverClassName("com.mysql.jdbc.Driver"); ads.setUrl("jdbc:mysql://localhost:3306/myDb"); ads.setUsername("root"); ads.setPassword("123"); ads.setMaxActive(10); ads.setMaxIdle(5); ads.setMinIdle(1); ads.setInitialSize(20); return ads;  } @Bean @Profile("pro") public DataSource dataSource() { JndiObjectFactoryBean jfb = new JndiObjectFactoryBean(); jfb.setJndiName("jdbc/myDb"); jfb.setResourceRef(true); jfb.setProxyInterface(javax.sql.DataSource.class); return (DataSource) jfb.getObject(); }}

当@profile使用到某个Bean上时,表示该Bean只有在指定的环境下才会被装配。

1.2.2、基于Xml

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"  xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"  xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util.xsd  http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc.xsd  http://www.springframework.org/schema/jee  http://www.springframework.org/schema/jee/spring-jee.xsd"> <beans profile="dev"> <jdbc:embedded-database id="embeddedDataSource" type="H2"/> </beans> <beans profile="test"> <bean id="basicDataSource" class="org.apache.commons.dbcp.BasicDataSource" p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost:3306/myDb" p:username="root" p:password="123" p:maxActive="10" p:maxIdle="5" p:minIdle="1" p:initialSize="20"> </bean> </beans> <beans profile="pro"> <jee:jndi-lookup jndi-name="jdbc/myDb" resource-ref="true" proxy-interface="javax.sql.DataSource"/> </beans></beans>

       配置文件的这种用法和JavaConfig作用相同,也是表明各个组件只有在特定的环境下才会被装配。

1.3、激活profile

   激活profile时需要依赖两个独立的属性:spring.profiles.active和spring.profiles.default,前者的优先级大于后者。

激活上下文中的profile,在web.xml配置:

<context-param>  <param-name>spring.profiles.active</param-name>  <param-value>dev</param-value> </context-param>

激活servlet中的profile,在web.xml配置:

<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-mvc.xml</param-value> </init-param> <init-param> <param-name>spring.profiles.active</param-name>  <param-value>dev</param-value>  </init-param></servlet><servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern></servlet-mapping>

手动加载上下文时激活profile

public class TestDataSourceConfig {private static AnnotationConfigApplicationContext afac = new AnnotationConfigApplicationContext(); @Test public void testDataSourceConfig() throws SQLException { afac.getEnvironment().addActiveProfile("dev"); afac.register(DataSourceConfig.class); afac.refresh(); }}

至此常用的环境配置与激活已全部探讨完毕。

关注我

冰点IT,探索最新开发技术,记录追求梦想的点点滴滴!


    长按二维码,或点击最上方蓝色的 冰点IT 关注我,您的关注是对我最好的鼓励!




以上是关于Spring5 环境配置之profile的主要内容,如果未能解决你的问题,请参考以下文章

springboot配置之Profile多环境支持

maven项目之Profile---不同环境打包不同配置

spring注解之@profile

Spring5.x源码分析 | 从踩坑到放弃之环境搭建

spring boot 之 spring.profiles

spring之@Profile注解