SpringInAction-- 配置Profile Bean

Profile Bean 使用场景描述:

在开发软件的时候,在数据库方面,往往不是一个库就能解决的,一般分为开发库、测试库、生产库,在这些库设置链接的时候,也会配置其对应的数据。

现有一种方式,就是单独的配置类,或者在xml中配置bean,然后在构建的时候确定哪一个配置编译到部署的应用。这种方式是可行的,但是也是有问题存在的,即当从开发阶段迁移到QA阶段的时候,重新部署是没有问题的,但是从QA阶段迁移到生产阶段的时候,重建有可能会引入bug并且会使得QA团队成员中带来不安的情绪。

这个时候我们就可以引入profile了

profile bean的好处

Spring提供的profile bean 配置,其原理是根上面的解决方式没啥区别,两种方法的区别就是在于spirng在运行的时候,会根据环境决定哪些bean应该被创建,哪些不被创建。因为不是在部署前去判断的,而是等运行的时候来判断的,这样一来,一个部署单元(可能是war包)就能够适合所有的环境,这样一来就没有必要重构了。

接下里就让我们从例子中来领会它的含义

假设我们有三种坐骑,当我们在陆地的时候可以选择 跳跳蛙、在天空的时候选择小黑龙、在海洋中的时候选择 皮皮虾。。

这样一来我们先创造一个 宠物坐骑接口类 PetMounts  然后分别创造自己的坐骑。 FlyingMounts 、LandMounts   、SeaMounts

PeTMounts

package com.bean.profile;

/**
 * Created by IntelliJ IDEA.
 * Author XueYuan
 * Data  2017/02/22
 * Time  16:46
 */

public interface PetMounts {

    void letsGo();
}

FlyingMounts

package com.bean.profile;

/**
 * Created by IntelliJ IDEA.
 * Author XueYuan
 * Data  2017/02/22
 * Time  16:52
 */

public class FlyingMounts implements PetMounts {

    public void letsGo() {
        System.out.println("我是飞行坐骑 小黑龙,我们走……!");
    }
}

LandMounts

package com.bean.profile;

/**
 * Created by IntelliJ IDEA.
 * Author XueYuan
 * Data  2017/02/22
 * Time  16:53
 */

public class LandMounts implements  PetMounts {
    public void letsGo() {

        System.out.println("我是陆地坐骑 跳跳蛙,我们走……!");
    }
}

SeaMounts

package com.bean.profile;

import org.springframework.stereotype.Component;

/**
 * Created by IntelliJ IDEA.
 * Author XueYuan
 * Data  2017/02/22
 * Time  16:54
 */

@Component
public class SeaMounts implements PetMounts {
    public void letsGo() {

        System.out.println("我是海洋坐骑 皮皮虾,我们走……!");
    }
}

好了坐骑我们创造好了,下面就开始根据环境来选择什么坐骑。

首先先来看 java文件的配置方法

package com.bean.profile;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

/**
 * Created by IntelliJ IDEA.
 * Author XueYuan
 * Data  2017/02/22
 * Time  16:44
 */

@Configuration
public class PetMountsConfig {

    @Bean
    @Profile("sky")
    public PetMounts sky() {
        return new FlyingMounts();
    }

    @Bean
    @Profile("land")
    public PetMounts land() {
        return new LandMounts();
    }

    @Bean
    @Profile("sea")
    public PetMounts sea() {
        return new SeaMounts();
    }

}

我们要分别创建Bean 然后在对应的方法上面添加profile

小贴士:在Spring3.1之前只能在类级别上面添加@Profile注解;从Spring3.2后开始就支持在方法上面添加注释

xml中配置Profile

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <beans profile="sky">
        <bean id="flyingMounts" class="com.bean.profile.FlyingMounts"/>
    </beans>

    <beans profile="land">
        <bean id="landMounts" class="com.bean.profile.LandMounts"/>
    </beans>

    <beans profile="sea">
        <bean id="seaMounts" class="com.bean.profile.SeaMounts"/>
    </beans>

</beans>

在xml中配置,主要是利<beans>中的Profile 属性



好了配置也配置好了,那么下面要怎么用,怎么激活呢?

Spring在确定哪个profile处于激活状态时,需要依赖两个独立的属性:spring.profiles.active和spring.profiles.default。如果设置了spring.profiles.active属性的话,那么它的值就会用来确定哪个profile是激活的。但如果没有设置spring.profiles.active属性的话,那Spring将会查找spring.profiles.default的值。如果spring.profiles.active和spring.profiles.default均没有设置的话,那就没有激活的profile,因此只会创建那些没有定义在profile中的bean。

有多种方式来设置这两个属性:

  • 作为DispatcherServlet的初始化参数;
  • 作为Web应用的上下文参数;
  • 作为JNDI条目;
  • 作为环境变量;
  • 作为JVM的系统属性;
  • 在集成测试类上,使用@ActiveProfiles注解设置。

下面就是在web中配置 profile (偷懒了下 直接书上的图片)

在测试中使用Profile的时候 方法如下:

@RunWith(SpringJUnit4ClassRunner.class)
/*@ContextConfiguration(classes = PetMountsConfig.class)*/
@ContextConfiguration(value = "config.xml")
@ActiveProfiles("sea")
public class LetsGo {

  ……
}


激活方法我们也知道了,现在就让我们选择一个坐骑,去把妹吧!

package com.bean.profile;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Created by IntelliJ IDEA.
 * Author XueYuan
 * Data  2017/02/22
 * Time  20:42
 */
@RunWith(SpringJUnit4ClassRunner.class)
/*@ContextConfiguration(classes = PetMountsConfig.class)*/
@ContextConfiguration(value = "config.xml")
@ActiveProfiles("sea")
public class LetsGo {

    @Autowired
PetMounts petMounts;

    @Test
    public void LetsGoLog(){
        petMounts.letsGo();
    }
}

以上就是peofile bean简单小例子,如有错误,请指出,谢谢~

代码:https://github.com/eoooxy/springinaction test下 的com.bean.profile中

时间: 2024-11-04 12:50:01

SpringInAction-- 配置Profile Bean的相关文章

使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forName(className) public class RefTest { @Test public void testRef(){ //Class cls = RefTest.class; //Class.forName("com.jboa.service.RefTest"); //new RefTest()

spring在整合框架中常用配置的bean

1 数据源 1.1spring默认的数据源DriverManagerDatasource <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"><

配置 Profile Manager(1)

一.开启 Server 的 HTTPS 服务 描述文件管理器是 OSX Server 中提供的 MDM 服务程序.要想开启Server 的 MDM,首先需要打开 Server 的 https 服务,否则描述文件管理器不可用.在 Server app 中,配置 https 服务很简单,只需为服务器指定一个ssl 证书. 1.配置 SSL 证书 打开 Server app,选择"服务器->证书",然后点击"证书"页面下方的"+"按钮,选择&qu

配置 Profile Manager(2)

五.配置登录用户 点开"账户->用户"页面,创建1个管理员: 创建 1 个普通用户: 六.启用 MDM 选择"服务->描述文件管理器",将 switch 按钮由"关"切换至"开"状态. 要给描述文件签名,可以勾选"给配置描述文件签名",然后点击右边的"编辑..."按钮,选择一个用于签名的证书: 七.注册设备 在 iPad/iPhone 上(和服务器同一 wifi 网络),使用

配置 Profile Manager(3)

八.推送企业应用 用管理员账户登录 https://yhy-xserver.local/profilemanager/. 首先通过"资源库->应用程序"上传一个企业应用(.ipa). 点击"资源库->设备",选择已注册设备,可以在"关于"中看到该设备的详细信息: 然后点击"应用程序". 向该设备添加刚才上传的企业应用. 点击"存储",应用改变.MDM 服务器将自动推送该应用到客户端.点击&quo

spring中bean配置和bean注入

1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用. 1 bean配置 bean配置有三种方法: 基于xml配置Bean 使用注解定义Bean 基于java类提供Bean定义信息 1.1 基于xml配置Bean 1.2 使用注解定义Be

Spring容器,Bean配置信息,Bean实现类以及应用程序四者的相互关系(看书随笔)

Spring容器,Bean配置信息,Bean实现类以及应用程序四者的相互关系图: Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载\实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序调用.

详解SSH注解配置,bean注解、事物注解等

使用过SSH注解的屌丝们都知道,要想使用注解需要在applicationContext.xml配置文件里面开启注解配置,开启方式如下:1.头部声明需加入xmlns:context="http://www.springframework.org/schema/context"http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3

maven配置profile,按指定环境打包

日常开发中,经常会处理开发环境.测试环境.生产环境的配置文件,一旦项目大了之后各种配置文件太多,每次修改配置文件切换各种环境时容易遗漏,解决方案可以使用maven配置profile来实现,修改pom.xml如下: 1.新增profiles,与build同级 <profiles> <profile> <!-- 测试环境 --> <id>test</id> <properties> <profiles.active>test&