`
234390216
  • 浏览: 10218704 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462010
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1774437
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1397500
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394706
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679508
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530293
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1180703
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:466017
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151030
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:67733
社区版块
存档分类
最新评论

Spring(19)——Profile(二)

阅读更多

19.2 指定启用的profile

前面已经介绍了profile的指定,我们知道指定了profile后则表示对应的内容只有在特定的profile下才会生效。当前应用究竟使用的是哪个profile,或者是哪些profile,这是需要我们来指定的。说的专业一点就叫激活,即只有处于激活状态的profile对应的定义才会生效,当然也包括那些没有指定profile的定义。

在Spring中激活哪个profile是通过参数spring.profiles.active来指定的,我们可以把它定义为一个系统环境变量、JVM参数,或者是在web.xml中的一个ServletContext参数。如下就是通过JVM参数指定激活的profile为dev的示例。

-Dspring.profiles.active=dev

如下是通过在web.xml文件中通过ServletContext的参数指定激活的profile的示例,其激活的profile是dev。

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

当然,我们也可以同时激活多个profile,同时激活多个profile时,多个profile之间以逗号隔开。如下示例即表示同时激活dev和production两个profile。(其它如JVM参数指定等是同样的规则)

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

除了使用spring.profiles.active参数进行指定外,我们还可以通过在程序中动态的指定激活的profile。如下示例中我们就通过获取当前ApplicationContext的Environment对象,然后通过该对象指定激活的profile为production。使用程序指定激活的profile时需要注意先构建一个空的ApplicationContext对象,然后再通过该对象的Environment对象指定激活的profile,再指定对应的bean定义对应的资源位置,最后通过调用refresh()方法让ApplicationContext对象解析对应的bean定义。

	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
	context.getEnvironment().setActiveProfiles("production");
	context.setConfigLocation("classpath:applicationContext.xml");
	context.refresh();

如果需要同时指定多个激活的profile,则可以给setActiveProfiles()方法指定多个参数,其对应的参数是一个可变参数。

	context.getEnvironment().setActiveProfiles("dev","production");

19.3 默认profile

此外,我们还可以给我们的应用指定默认的profile。我们知道如果一个<beans/>没有指定profile,且其上级的<beans/>也没有指定profile,那么对应<beans/>中定义的所有的bean无论激活的何种profile,它们都是可用的。而默认profile的概念是我们定义一个默认的profile,然后如果一个<beans/>指定的profile为默认的profile,则当没有激活的profile时,对应默认profile的<beans/>中定义的bean都是可用的,但是一旦有激活的profile,那么对应默认profile的<beans/>就是不可用的。如果我们默认的bean定义不指定profile的话,那么对应的bean定义将在所有的情况下都是可用的,一旦我们改变profile,那么可能就会存在两个相同类型的bean定义。又或者我们将默认的bean定义与特定的bean定义定义为不同的两个profile,这样的结果是我们必须指定一个激活的profile。所以说默认profile这种机制也是非常有用的,即我们可以通过默认profile来定义默认的bean定义,然后通过改变profile来改变对应的bean定义。

Spring中默认profile的名称是“default”,即默认情况下我们将一个<beans/>的profile指定为default,即表示其对应默认的profile。如下示例中我们定义了在没有处于激活状态的profile时hello_default是可用的,而在名称为production的profile处于激活状态时hello_production是可用的。

<!-- 只有在激活了名称为production的profile时其中定义的bean才是可用的 -->
<beans profile="production">
	<bean id="hello_production" class="com.app.Hello"/>
</beans>

<!-- 默认profile,即只有在没有激活任何profile的情况下其中定义的bean才是可用的 -->
<beans profile="default">
	<bean id="hello_default" class="com.app.Hello"/>
</beans>

19.3.1 更改默认profile的名称

默认profile的名称是“default”,我们也可以通过spring.profiles.default参数进行更改,更改方式类似于通过参数spring.profiles.active指定激活的profile。

1、如下是通过JVM参数指定默认的profile为production。

	-Dspring.profiles.default=production

2、如下是通过ServletContext的参数指定默认的profile为production(供ContextLoaderListener使用)。

<context-param>
	<param-name>spring.profiles.default</param-name>
	<param-value>production</param-value>
</context-param>

对于这种直接通过参数spring.profiles.default指定默认profile的情况,我们也可以同时指定多个profile,多个profile之间以逗号隔开。

3、也可以通过程序化的方式获取ApplicationContext对应的Environment对象,然后通过该对象设置对应的默认profile。如下示例表示我们设置默认的profile为“default”和“production”。setDefaultProfiles()方法接收的是一个可变参数,所以我们可以同时指定多个默认的profile。

	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
	context.getEnvironment().setDefaultProfiles("production", "default");
	context.setConfigLocation("classpath:applicationContext.xml");
	context.refresh();

(注:本文是基于Spring4.1.0所写)

0
0
分享到:
评论

相关推荐

    Spring————面试题库

    Spring是一个开源的Java平台,它是Java应用程序开发的一个综合和广泛的基础支持平台。Spring框架的目的是帮助Java开发者解决在开发应用程序时遇到的基础性问题,让开发者能够专注于业务逻辑的开发,而不必担心底层...

    Spring系列——MVC框架整合.md

    Spring系列——MVC框架整合.md

    征服Spring AOP—— Schema

    本文将深入探讨“Spring AOP——Schema”,这是Spring AOP的一种配置方式,通过XML schema定义切面和通知。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,旨在提高软件的模块化程度,将关注点...

    Spring Mvc——第一个应用程序

    **Spring MVC —— 第一个应用程序** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,使得开发者可以专注于业务逻辑而不必过于关心...

    Quartz Spring整合——附带webservice Demo

    在"Quartz Spring整合——附带webservice Demo"的项目中,我们可以看到如何将这两个强大的工具结合在一起。这个Demo可能包含了一个使用Quartz调度器来触发Web服务调用的示例。Web服务(Webservice)是一种基于标准的...

    SpringCloud——Zookeeper(注册中心)

    SpringCloud为Zookeeper提供了一个名为`spring-cloud-starter-zookeeper`的启动器,允许开发者轻松地将Zookeeper集成到SpringBoot应用中。首先,我们需要在项目中引入依赖: ```xml &lt;groupId&gt;org.springframework...

    Spring特性——事件驱动模型

    本篇文章将深入探讨Spring框架的一个重要特性——事件驱动模型。通过理解这一特性,开发者可以更好地利用Spring来实现应用间的通信和协调,提高系统的灵活性和可扩展性。 事件驱动模型是一种设计模式,它基于发布/...

    SpringCloud——声明性REST客户端(Feign)

    【SpringCloud——声明性REST客户端(Feign)】 在分布式微服务架构中,服务之间的通信是至关重要的。Spring Cloud提供了一种优雅的方式,通过Feign客户端来实现这一目标。Feign是一个声明式的Web服务客户端,它...

    SpringCloud——分布式跟踪(Sleuth)

    Spring Cloud Sleuth是Spring Cloud生态系统的一部分,它实现了分布式追踪的标准——OpenTracing和Zipkin。通过集成Sleuth,开发者可以在不修改代码的情况下,轻松地在微服务架构中实现请求的全链路追踪。 二、核心...

    Spring框架的简单实现

    我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC...【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)

    ProSpring——Spring专业开发指南

    《ProSpring——Spring专业开发指南》是一本深入探讨Spring框架的专业书籍,旨在帮助开发者全面理解和掌握Spring的核心概念、功能及最佳实践。通过阅读本书,你可以深入理解Spring如何为Java应用程序提供强大的依赖...

    SpringCloud——客户端负载平衡器(Ribbon)

    Ribbon是一个客户端负载均衡器,它可以很好地控制HTTP和TCP客户端的行为。

    二、Spring源码分析——BeanFactory

    《Spring源码分析——BeanFactory》 在Java的IoC(Inversion of Control)和DI(Dependency Injection)领域,Spring框架扮演着至关重要的角色。BeanFactory是Spring的核心组件之一,它是容器的基石,负责管理应用...

    Spring开发指南——中文版

    《Spring开发指南——中文版》是由夏昕编著的一本针对Spring框架的中文教程,旨在帮助开发者更好地理解和应用Spring框架。Spring是Java平台上的一个核心框架,广泛应用于企业级应用开发,提供了一种全面的编程和配置...

    Spring.NET学习笔记19——整合NHibernate和ASP.NET MVC的代码

    刘冬编写的Spring.NET,NHibernate,ASP.NET MVC例子 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Nhibernate_AspNetMvc.html

Global site tag (gtag.js) - Google Analytics