Spring框架学习(六):@Profile搞定多套配置文件问题

时间:2022-11-29 20:31:59

在实际开发过程中,根据不同的环境准备多套的配置是特别常见的情形。Spring为实现这个需求提供了简单的支持。在之前的文章中,我讲解了两种配置Spring的方式:Java配置、xml文件。针对这两种配置方式,实现多个环境的配置问题在实现方法上略有差异,但原理一致,可以类比学习。

 

我们来模拟一个情形:根据不同的环境,我们需要不同的数据源配置(数据库信息配置),比如开发环境、生产环境。在基于Java配置的方法中,我们可以这么实现:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import javax.sql.DataSource;

@Configuration
public class MyConfig {

    @Bean
    @Profile("dev")
    DataSource dataSource1(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl("url1-------------");
        dataSource.setUsername("user1");
        //....
        return dataSource;
    }

    @Bean
    @Profile("pro")
    DataSource dataSource2(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl("url2-------------");
        dataSource.setUsername("user2");
        //....
        return dataSource;
    }
}

 

这个例子只是简单说明了两种不同的数据源,在实际开发过程中数据库配置会更复杂一些,不过这已经可以说明准备多个环境下的配置的重要性了。使用在创建bean的函数上使用@Profile注解,当配置类或者配置文件加载到Spring上下文中时,会根据当前环境的激活选项来决定某个bean是否需要创建。上面的代码只是说明了哪个环境使用哪个数据源,我们还需要在系统运行的时候指定激活哪个环境。其实我们只需要设定这两个条目的值就可以了。

  • spring.profiles.active(如果配置了这个条目的值,系统运行时以这个条目指定的配置为准)
  • spring.profiles.default(如果没有指定spring.profiles.active,应当配置一个默认环境下的配置)

 

在不同的应用程序中,配置这两个条目有不同的方法,大概有这几类:

Spring框架学习(六):@Profile搞定多套配置文件问题

 

 实际开发过程中应该使用对应的方法去激活。

如果你是用的是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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <beans profile="dev">
        <bean id="datasource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="url" value="url1----------"/>
            <property name="username" value="username1"/>
        </bean>
    </beans>

    <beans profile="pro">
        <bean id="datasource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="url" value="url2----------"/>
            <property name="username" value="username2"/>
        </bean>
    </beans>
</beans>

激活不同环境的方式与上面一致,如果不知道具体的方法,可以查阅其他资料。顺便提一下,Java配置和xml配置的bean是可以互相引用的,因为这些bean最后都存在于Spring上下文中,话说回来了,一个项目只有一种启动上下文的方式,使用了基于注解的就不能再使用基于xml的了,因为你总不想创建两个上下文吧?所以在只能启动一个上下文的情况下,如何在xml文件中使用Java配置类的bean或者相反情况怎么引用呢?你可以思考一下或者查阅一下资料,这里不展开讲解了。

 

如果这篇文章对你有帮助,来一波素质三连吧~下一篇继续学习Spring高级装配