Spring Profile Bean总结

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路Spring Profile Bean总结,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

如何在不同的环境下,使用不同的bean?

profile bean

Spring不是在构建时决定创建哪个bean,而是在运行时再确定。这样,同一个包能够适用于所有的环境,没必要重新构建。
Spring 3.1中,引入bean profile功能。
Java配置中,可以使用@Profile注解指定某个bean属于哪一个profile。

在Spring 3.1中,只能在类级别上使用@Profile注解,缺点:一个环境的bean只能放在一个类中;

@Configuration
@Profile("dev")
public classs A {
	...
}

从Spring 3.2,可以在方法级别上使用@Profile注解,这样两个bean的声明可以放在同一个类中了;

@Configuration
public classs A {
	@Bean
	@Profile("dev")
	public DataSource dataSource1(){
		...
	}

	@Bean
	@Profile("prod")
	public DataSource dataSource2(){
		...
	}
}

核心知识点:

只有当规定的profile激活时,相应的bean才会创建。
没有指定profile的bean始终都会被创建,与激活哪个profile没有关系。

也可以在XML中配置profile
作为<beans>元素的属性。

激活profile

Spring在确定哪个profile处于激活状态时,需要依赖两个独立的属性:spring.profiles.activespring.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注解设置。

也可以选择spring.profiles.active和spring.profiles.default的最佳组合方式以满足需求。
例如,一种方式是使用DispatcherServlet的参数将spring.profiles.default设置为开发环境的profile,在Servlet上下文中进行设置(为了兼顾到ContextLoaderListener)。作为<context-param> 添加在Web.xml中,例如

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

当应用程序部署到QA、生产或其他环境之中时,负责部署的人根据情况使用系统属性、环境变量或JNDI设置spring.profiles.active即可。
当设置spring.profiles.active以后,至于spring.profiles.default置成什么值就已经无所谓了;系统会优先使用spring.profiles.active中所设置的profile。

注意,在spring.profiles.active和spring.profiles.default中,profile使用的都是复数形式。这意味着你可以同时激活多个profile,这可以通过列出多个profile名称,并以逗号分隔来实现。当然,同时启用dev和prod profile可能也没有太大的意义,不过你可以同时设置多个彼此不相关的profile。

Spring提供了@ActiveProfiles注解,我们可以使用它来指定运行测试时要激活哪个profile。在集成测试时,通常想要激活的是开发环境的profile。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={MyTestConfig.class})
@ActiveProfiles("dev")
public class MyTest {
  ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/155743.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!