溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring @Profile注解如何實(shí)現(xiàn)多環(huán)境配置

發(fā)布時(shí)間:2020-08-01 14:44:50 來源:億速云 閱讀:389 作者:小豬 欄目:編程語言

小編這次要給大家分享的是Spring @Profile注解如何實(shí)現(xiàn)多環(huán)境配置,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

一 前言

springboot中使用多環(huán)境開發(fā)如此簡單,你想知道spring中是如何實(shí)現(xiàn)的么?一起來學(xué)習(xí)吧??!你為什么不好好學(xué)習(xí)基礎(chǔ),面試一直被diss呢?說到底還不是你認(rèn)為都會(huì)了,其實(shí)你都不會(huì),一問三不知??!

二 @profile實(shí)現(xiàn)多環(huán)境配置

2.1 @profile配置

使用@profile注解的目的是未了多環(huán)境開發(fā),比如開發(fā)環(huán)境使用dev, 生產(chǎn)環(huán)境使用prod,就可以使用@Profile注解實(shí)現(xiàn)不同的開發(fā)環(huán)境使用不同的數(shù)據(jù)源;

@profile注解 使用說明:

spring3.2之前 @Profile注解用在類上

spring3.2 之后 @Profile注解用在 方法上

/**
 * @Author lsc
 * <p>spring3.2之前 @Profile注解用在類上
 * spring3.2 之后 @Profile注解用在 方法上
 * </p>
 */
@Configuration
public class DataSourceConfig {

  @Bean
  @Profile("dev")
  public DataSource devDataSource() {
    System.out.println(" dev DataSource !!");
    BasicDataSource basicDataSource = new BasicDataSource();
    basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
    basicDataSource.setUrl("jdbc:mysql://localhost:3308/zszxz");
    basicDataSource.setUsername("root");
    basicDataSource.setPassword("1234");
    return basicDataSource;
  }

  @Bean
  @Profile("prod")
  public DataSource prodDataSource() {
    System.out.println(" prod DataSource !!");
    BasicDataSource basicDataSource = new BasicDataSource();
    basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
    basicDataSource.setUrl("jdbc:mysql://localhost:3306/zszxz");
    basicDataSource.setUsername("root");
    basicDataSource.setPassword("1234");
    return basicDataSource;
  }
}

如果你是在xml中配置,示例如下

<beans profile="dev">
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
       p:driverClassName="com.mysql.jdbc.Driver"
       p:url="jdbc:mysql://localhost:3306/zszxzb"
       p:username="root"
       p:password="1234"/>
</beans>
<beans profile="prod">
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
       p:driverClassName="com.mysql.jdbc.Driver"
       p:url="jdbc:mysql://localhost:3306/zszxzb"
       p:username="root"
       p:password="1234"/>
</beans>

2.2 激活方式

激活方式一

  • spring.profiles.active 激活方式
  • 如果 spring.profiles.active 未配置, 使用spring.profiles.default激活方式
  • 如果前面都為配置,就會(huì)加載沒有定義在profile中的bean;
     

激活方式二

在web.xml 中配置

<context-param>
	<param-name>spring.profiles.active</param-name>
  <param-value>dev</param-value>
</context-param>
<servlet>
    <servlet-name>zszxzServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>spring.profiles.default</param-name>
      <param-value>dev</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>zszxzServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

激活方式三

在類上使用@ActiveProfiles注解

測試如下

@RunWith(SpringJUnit4ClassRunner.class)//創(chuàng)建spring應(yīng)用上下文
@ContextConfiguration(classes= DataSourceConfig.class)//加載配置類
@ActiveProfiles("dev")
public class ProfileTest {

  @Autowired
  private DataSource dataSource;

  @Test
  public void sheetTest(){
    JdbcTemplate jdbc = new JdbcTemplate(dataSource);
    List<String> query = jdbc.query("select * from customer", new RowMapper<String>() {
      @Override
      public String mapRow(ResultSet rs, int rowNum) throws SQLException {
        return rs.getLong("id") + ":" + rs.getString("customer_name");
      }
    });
    // [19:知識(shí)追尋者, 20:知識(shí)追尋者, 21:知識(shí)追尋者, 22:知識(shí)追尋者, 23:知識(shí)追尋者]
    System.out.println(query);
  }
}

看完這篇關(guān)于Spring @Profile注解如何實(shí)現(xiàn)多環(huán)境配置的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI