您的位置:首页 > 编程语言 > Java开发

03-Spring profile实用精简版介绍

2019-07-09 00:49 1496 查看

  为什么说是实用精简版,没办法,工作太忙压力大啊,菜是原罪啊,所以接下来写的一些博客可能都是更偏实用性,精简点,方便自己回顾,快速上手使用即可,毕竟感觉不详细还有书不是吗。

  profile是用来干什么的?简单来说,就是现实需求中,不同环境下我们所要的某个bean可能会有所不同。

  1. 配置profile bean

    可以使用@Profile注解指定某个bean属于哪个profile。比如下雨天时我需要的工具是雨伞,所以可以如下配置:

@Configuration
@Profile("rainyday")
public class RainyDayConfig {
@Bean
public Tool tool() {
return new Umbrella();   //假设Umbrella继承了Tool
}
}

  这里@Profile注解用在了类级别上,表明只有rainyday profile激活时,这个配置类中的bean才会被创建,相反,当rainyday profile没有被激活时,带有@Bean注解的方法会被忽略。同理,现在晴天时,我可能需要阳伞,可如下配置:

@Configuration
@Profile("sunnyday")
public class SunnyDayConfig {
@Bean
public Tool tool() {
return new Sunshade();   //假设Sunshade继承了Tool
}
}

    与下雨天(rainyday)一样,上面这段配置类中使用@Bean注解的方法也只有在sunnyday profile激活时,才可以生效。

  不过这个还是有点麻烦,需要两个配置类,这是Spring 3.1中的唯一写法,但是Spring 3.2之后,就可以这样写了,如下:

@Configuration
public class ToolConfig {
@Bean
@Profile("rainyday")
public Tool umbrellaTool() {
return new Umbrella();   //假设Umbrella继承了Tool
}

@Bean
@Profile("sunnyday")
public Tool sunshadeTool() {
return new Sunshade();   //假设Sunshade继承了Tool
}

@Bean
public Shoes shoes() {
return new Shoes();
}
}

  这样是不是就方便多了,我只需要一个配置类,需要注意的是,umbrellaTool方法只会在下雨天(rainyday)profile激活时生效并创建bean,sunshadeTool方法只会在晴天(sunnyday)profile激活时生效并创建bean,而shoes方法没有指定profile,它会始终生效并创建bean。

  上面这些都是使用JavaConfig类方式在声明profile,其实也可在XML中配置profile bean,只需在<beans>标签中添加profile属性即可,这里不详细介绍了,可参考书。

2. 激活profile

  profile是配置好了,但是怎么激活profile呢?别急,下面讲的就是这些啦😁😁。。。。

  Spring怎么知道哪个profile处于激活状态?其实要做到这点,Spring需要依赖于两个属性,一个是spring.profiles.active,另一个是spring.profiles.default。当设置了spring.profiles.active属性时,那么它的值就会用来确定哪个profile是激活的,如果没有设置,那么spring.profiles.default的值就用来确定哪个profile是激活的。那问题又来了,两个我都没设置怎么办?这种情况下,也就是没有profile处于激活状态,那么只有没被定义在profile中的bean会被创建,想想哪个shoes😁😁。。。。。目前,有多种方式可设置这两个属性,如下

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

    这些个方法任选其一即可,比如在Web应用中,设置spring.profiles.default的web.xml如下所示:

<web-app ......>
......
<!-- 为上下文设置默认的profile -->
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>rainyday</param-value>
</context-param>
......

......
<servlet>
......
<!-- 为Servlet设置默认的profile -->
<init-param>
<param-name>spring.profiles.default</param-name>
<param-value>rainyday</param-value>
</init-param>
......
</servlet>
......
</web-app>

  或许,你有点疑问,为什么配置中使用的都是profiles而非profile,难道可以让多个profile处于激活状态?没错,就是这样,我们可以设置多个,在<param-value>中可以设置多个profile,使用逗号分隔就行,如<param-value>rainyday,sunnyday</param-value>。。。。。

  好了这部分就到这了,写的不好,尽量参考书,但是想要快速上手使用应该可以了😁😁。。。。。。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: