zoukankan      html  css  js  c++  java
  • SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-002-激活PROFILE、设置默认值、@ActiveProfiles

    一、

    Spring honors two separate properties when determining which profiles are active:
    spring.profiles.active and spring.profiles.default . If spring.profiles.active
    is set, then its value determines which profiles are active. But if spring
    .profiles.active isn’t set, then Spring looks to spring.profiles.default . If neither
    spring.profiles.active nor spring.profiles.default is set, then there are no
    active profiles, and only those beans that aren’t defined as being in a profile are created.
    There are several ways to set these properties:
     As initialization parameters on DispatcherServlet
     As context parameters of a web application
     As JNDI entries
     As environment variables
     As JVM system properties
     Using the @ActiveProfiles annotation on an integration test class

    二、

    1.在web.xml中设置PROFILE的默认值

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     3 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     4     <context-param>
     5         <param-name>contextConfigLocation</param-name>
     6         <param-value>/WEB-INF/spring/root-context.xml</param-value>
     7     </context-param>
     8     <context-param>
     9         <param-name>spring.profiles.default</param-name>
    10         <param-value>dev</param-value>
    11     </context-param>
    12     <listener>
    13         <listener-class>
    14             org.springframework.web.context.ContextLoaderListener
    15         </listener-class>
    16     </listener>
    17     <servlet>
    18         <servlet-name>appServlet</servlet-name>
    19         <servlet-class>
    20             org.springframework.web.servlet.DispatcherServlet
    21         </servlet-class>
    22         <init-param>
    23             <param-name>spring.profiles.default</param-name>
    24             <param-value>dev</param-value>
    25         </init-param>
    26         <load-on-startup>1</load-on-startup>
    27     </servlet>
    28     <servlet-mapping>
    29         <servlet-name>appServlet</servlet-name>
    30         <url-pattern>/</url-pattern>
    31     </servlet-mapping>
    32 </web-app>

    2.在测试时可以用@ActiveProfiles来切换profile

     1 package profiles;
     2 
     3 import static org.junit.Assert.assertNotNull;
     4 
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 import java.util.List;
     8 
     9 import javax.sql.DataSource;
    10 import static org.junit.Assert.*;
    11 
    12 import org.junit.Test;
    13 import org.junit.runner.RunWith;
    14 import org.springframework.beans.factory.annotation.Autowired;
    15 import org.springframework.jdbc.core.JdbcTemplate;
    16 import org.springframework.jdbc.core.RowMapper;
    17 import org.springframework.test.context.ActiveProfiles;
    18 import org.springframework.test.context.ContextConfiguration;
    19 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    20 
    21 import com.myapp.DataSourceConfig;
    22 
    23 public class DataSourceConfigTest {
    24 
    25   @RunWith(SpringJUnit4ClassRunner.class)
    26   @ContextConfiguration(classes=DataSourceConfig.class)
    27   @ActiveProfiles("dev")
    28   public static class DevDataSourceTest {
    29     @Autowired
    30     private DataSource dataSource;
    31     
    32     @Test
    33     public void shouldBeEmbeddedDatasource() {
    34       assertNotNull(dataSource);
    35       JdbcTemplate jdbc = new JdbcTemplate(dataSource);
    36       List<String> results = jdbc.query("select id, name from Things", new RowMapper<String>() {
    37         @Override
    38         public String mapRow(ResultSet rs, int rowNum) throws SQLException {
    39           return rs.getLong("id") + ":" + rs.getString("name");
    40         }
    41       });
    42       
    43       assertEquals(1, results.size());
    44       assertEquals("1:A", results.get(0));
    45     }
    46   }
    47 
    48   @RunWith(SpringJUnit4ClassRunner.class)
    49   @ContextConfiguration(classes=DataSourceConfig.class)
    50   @ActiveProfiles("prod")
    51   public static class ProductionDataSourceTest {
    52     @Autowired
    53     private DataSource dataSource;
    54     
    55     @Test
    56     public void shouldBeEmbeddedDatasource() {
    57       // should be null, because there isn't a datasource configured in JNDI
    58       assertNull(dataSource);
    59     }
    60   }
    61   
    62   @RunWith(SpringJUnit4ClassRunner.class)
    63   @ContextConfiguration("classpath:datasource-config.xml")
    64   @ActiveProfiles("dev")
    65   public static class DevDataSourceTest_XMLConfig {
    66     @Autowired
    67     private DataSource dataSource;
    68     
    69     @Test
    70     public void shouldBeEmbeddedDatasource() {
    71       assertNotNull(dataSource);
    72       JdbcTemplate jdbc = new JdbcTemplate(dataSource);
    73       List<String> results = jdbc.query("select id, name from Things", new RowMapper<String>() {
    74         @Override
    75         public String mapRow(ResultSet rs, int rowNum) throws SQLException {
    76           return rs.getLong("id") + ":" + rs.getString("name");
    77         }
    78       });
    79       
    80       assertEquals(1, results.size());
    81       assertEquals("1:A", results.get(0));
    82     }
    83   }
    84 
    85   @RunWith(SpringJUnit4ClassRunner.class)
    86   @ContextConfiguration("classpath:datasource-config.xml")
    87   @ActiveProfiles("prod")
    88   public static class ProductionDataSourceTest_XMLConfig {
    89     @Autowired(required=false)
    90     private DataSource dataSource;
    91     
    92     @Test
    93     public void shouldBeEmbeddedDatasource() {
    94       // should be null, because there isn't a datasource configured in JNDI
    95       assertNull(dataSource);
    96     }
    97   }
    98 
    99 }
  • 相关阅读:
    python 时间等待
    python threading多线程
    c 字符串的结束标志
    c 输出是自动显示输出类型
    c 的占位符
    c数据类型
    游戏引擎
    java 数据类型
    python 读写json数据
    python 多线程_thread
  • 原文地址:https://www.cnblogs.com/shamgod/p/5235287.html
Copyright © 2011-2022 走看看