您当前的位置: 首页 >  spring

qq_34412985

暂无认证

  • 3浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring学习笔记 根据部署环境加载bean

qq_34412985 发布时间:2020-08-01 16:15:14 ,浏览量:3

1.引言

在开发过程中遇到的一大挑战就是将应用程序从一个环境部署到另一个环境,Spring为环境相关的bean提供了很好的解决方案。在这个过程中Spring会根据环境决定该创建哪个bean和不创建哪个bean。不过Spring并不是在构建的时候做出这样的决策,而是等到运行时再来确定。 这样的结果就是同一个部署单元(可能是WAR文件)能够适用于所有的环境,没有必要进行重新构建。

2.配置profile bean

在3.1版本,Spring引入了bean profile的功能。在Java配置中,可以使用@Profile注解指定某个bean属于哪一个profile。在应用部署到相应的环境中时,只要确保相应的profile处于激活状态就可以执行相关的bean。部分代码如下

package com.myapp;
import ...

@Configuration
public class DataSourceConfig{

  @Bean
  @Profile("dev") //开发环境使用这个bean,通过嵌入式数据库获得DataSource
  public DataSource embeddedDataSource(){
    return ...
  }

  @Bean
  @Profile("prod") //生产环境使用这个bean,通过JNDI从容器获取DataSource
  public DataSource jndiDataSource()
  {
    return ...
  }
}

注意,没有指定profile的bean始终都会创建,与激活哪个profile没有关系。 同时XML中也可以通过元素的profie属性进行设置,这里就不过多的讲解了。那么问题来了:我们该怎样激活某个profile呢?

3.激活profile

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

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

例如在Web应用中,设置spring.profiles.default的web.xml文件会如下所示:


            
关注
打赏
1653291990
查看更多评论
0.0955s