码迷,mamicode.com
首页 > 编程语言 > 详细

【Spring】3.1、环境与profile

时间:2018-05-05 16:43:22      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:jdbc   集成测试   location   ini   sql   junit   JD   单元   obj   

程序运行有多个环境,比如开发环境、测试环境、生产环境等。

在每个环境中,很多东西有不同的做法,如使用的数据库等。

为了避免在切换运行环境是需要对程序进行大量修改,Spring提供了profile设置,使程序能对不同环境做出对应的处理。

使用profile,可以使一个部署单元(如war包)可以用于不同的环境,内部的bean会根据环境所需而创建。

1、配置profile bean

Java配置profile

使用@Profile注解指定bean属于哪个profile

针对类,表明这个类下所有的bean都在对应profile激活时才创建

@Configuration
@Profile("dev")
public class DataSourceConfig {
  @Bean(destroyMethod = "shutdown")
  public DataSource embeddedDataSource() {
    return new EmbeddedDatabaseBuilder().build();
  }
}

针对方法,表明

@Configuration
public class DataSourceConfig {
  @Bean(destroyMethod = "shutdown")
  @Profile("dev")
  public DataSource embeddedDataSource() {
    return new EmbeddedDatabaseBuilder().build();
  }
  @Bean
  @Profile("prod")
  public DataSource jndiDataSource() {
    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();return (DataSource) jndiObjectFactoryBean.getObject();
  }
}

 XML配置profile

设置整个XML文件属于某个profile, 每一个环境创建一个XML文件,把这些XML文件都放在部署环境中,根据环境自动调用

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  xmlns:jee="http://www.springframework.org/schema/jee" xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="
    http://www.springframework.org/schema/jee
    http://www.springframework.org/schema/jee/spring-jee.xsd
    http://www.springframework.org/schema/jdbc
    http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd"
    profile="dev">
    
    <jdbc:embedded-database id="dataSource" type="H2">
      <jdbc:script location="classpath:schema.sql" />
      <jdbc:script location="classpath:test-data.sql" />
    </jdbc:embedded-database>
    
</beans>

 也可以通过嵌套<beans>元素,在同一个XML文件下创建不同profile bean

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

  <beans profile="dev">
    <jdbc:embedded-database id="dataSource" type="H2">
      <jdbc:script location="classpath:schema.sql" />
      <jdbc:script location="classpath:test-data.sql" />
    </jdbc:embedded-database>
  </beans>
  
  <beans profile="prod">
    <jee:jndi-lookup id="dataSource"
      lazy-init="true"
      jndi-name="jdbc/myDatabase"
      resource-ref="true"
      proxy-interface="javax.sql.DataSource" />
  </beans>
</beans>

2、激活profile

1、没有指定profile的bean任何时候都会创建

2、根据spring.profiles.active属性,找到当前激活的profile

3、如果active属性没有设置,则找spring.profiles.default属性,找到默认的profile

4、如果2个值都没有设置,则不会创建任何定义在profile里面的bean

spring.profiles.active,spring.profiles.default2个参数的设置方式:

1、作为DispatcherServlet的初始化参数;

2、作为Web应用的上下文参数;

3、作为JNDI条目;

4、作为环境变量;

5、作为JVM的系统属性;

6、在集成测试类上,使用@ActiveProfiles注解设置

具体写法,后面的例子会讲到

3、使用profile进行测试

使用@ActiveProfiles注解

  @RunWith(SpringJUnit4ClassRunner.class)
  @ContextConfiguration(classes=DataSourceConfig.class)
  @ActiveProfiles("prod")
  public static class ProductionDataSourceTest {
    @Autowired
    private DataSource dataSource;
    
    @Test
    public void shouldBeEmbeddedDatasource() {
      // should be null, because there isn‘t a datasource configured in JNDI
      assertNull(dataSource);
    }
  }

【Spring】3.1、环境与profile

标签:jdbc   集成测试   location   ini   sql   junit   JD   单元   obj   

原文地址:https://www.cnblogs.com/LiveYourLife/p/8994230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!