1.配置profile bean

Spring为环境相关的bean所提供的解决方案其实与构建时的方案没有太大的差别。当然,在这个过程中需要根据环境决定该创建哪个bean和不创建哪个bean。不过Spring并不是在构建的时候做出这样的决策,而是等到运行时再来确定。这样的结果就是同一个部署单元(可能会是WAR文件)能够适用于所有的环境,没有必要进行重新构建。在3.1版本中,Spring引入了bean profile的功能。要使用profile,你首先要将所有不同的bean定义整理到一个或多个profile之中,在将应用部署到每个环境时,要确保对应的profile处于激活(active)的状态。在Java配置中,可以使用@Profile注解指定某个bean属于哪一个profile。例如,在配置类中,嵌入式数据库的DataSource可能会配置成如下所示:

 

我希望你能够注意的是@Profile注解应用在了类级别上。它会告诉Spring这个配置类中的bean只有在dev profile激活时才会创建。如果dev profile没有激活的话,那么带有@Bean注解的方法都会被忽略

掉。

同时,你可能还需要有一个适用于生产环境的配置,如下所示

在本例中,只有prod profile激活的时候,才会创建对应的bean。

在Spring 3.1中,只能在类级别上使用@Profile注解。不过,从Spring 3.2开始,你也可以在方法级别上使用@Profile注解,与@Bean注解一同使用。这样的话,就能将这两个bean的声明放到同

一个配置类之中,如下所示

这里有个问题需要注意,尽管每个DataSource bean都被声明在一个profile中,并且只有当规定的profile激活时,相应的bean才会被创建,但是可能会有其他的bean并没有声明在一个给定的profile范围内。没有指定profile的bean始终都会被创建,与激活哪个profile没有关系。

1.2在XML中配置profile

1.3激活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注解设置。

最新文章

  1. Design Patterns Simplified - Part 2 (Singleton)【设计模式简述--第二部分(单例模式)】
  2. SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块
  3. Easyui datebox 限制时间选择范围
  4. ada 图形编辑器 - GNAT GPL
  5. [ACM_其他] Modular Inverse [a关于模m的逆 模线性方程]
  6. 九度 链表中倒数第k个结点
  7. Python全栈开发之MySQL(三)视图,存储过程触发器,函数,事务,索引
  8. CentOS 6.7编译安装PHP 5.6
  9. 16--Box2D使用(二、显示物理世界)
  10. Unity3D使用NGUI做个弹窗
  11. NYNU_省赛选拔题(6)
  12. ios开发屏幕问题
  13. C# .NET更智能的数据库操作封装项目
  14. JavaSe: String的编译期优化
  15. JpaManytoMany
  16. 【原创】访问Linux进程文件表导致系统异常复位的排查记录
  17. 建议1---理解Pythonic的概念
  18. python生成字符画
  19. IntelliJ IDEA总是提示Cannot resolve symbol
  20. opencv---JPEG图像质量检测代码

热门文章

  1. Linux下iptables介绍
  2. Struts标签库详解,非常好的Struts标签详解
  3. 快速排序的partition版本实现
  4. 监听器(Listener)学习(二)在开发中的常见应用
  5. 使用poi进行excel导入并解析插入数据库
  6. Viterbi算法和隐马尔可夫模型(HMM)算法
  7. ios 视图切换翻页效果
  8. hadoop2.2使用手册2:如何运行自带wordcount
  9. [CF895E]Eyes Closed
  10. JavaScript:基本包装类型