学科分类
目录
Spring Boot开发

使用@Profile注解进行多环境配置

Spring Boot除了支持使用Profile文件进行多环境配置外,还支持使用@Profile注解进行多环境配置。@Profile注解主要使用在类上,并需要通过value属性指定类对应的环境配置标识(等同于Profile文件名称中的profile值),然后同样需要在全局配置文件中进行指定激活。

下面,通过一个案例来演示@Profile注解进行多环境配置的具体使用,具体步骤如下。

(1)在chapter02项目的com.itheima.config包下,新创建一个用于数据库配置的接口DBConnector,并在该接口中声明一个数据库配置连接方法,内容如文件1所示。

文件1 DBConnector.java

 1    public interface DBConnector {
 2        public void configure();
 3    }

(2)接着,在chapter02项目的com.itheima.config包下,针对数据库配置接口DBConnector进行不同数据库配置创建不同环境的实现类DevDBConnector、TestDBConnector和ProdDBConnector,并重写configure()方法模拟进行不同数据库环境的连接配置,内容分别如文件2、3和4所示。

文件2 DevDBConnector.java

 1    import org.springframework.context.annotation.Configuration;
 2    import org.springframework.context.annotation.Profile;
 3    @Configuration
 4    @Profile("dev")    // 指定多环境配置类标识
 5    public class DevDBConnector implements DBConnector {
 6        @Override
 7        public void configure() {
 8            System.out.println("数据库配置环境dev");
 9        }
 10    }

文件3 TestDBConnector.java

 1    import org.springframework.context.annotation.Configuration;
 2    import org.springframework.context.annotation.Profile;
 3    @Configuration
 4    @Profile("test")   // 指定多环境配置类标识
 5    public class TestDBConnector implements DBConnector {
 6        @Override
 7        public void configure() {
 8            System.out.println("数据库配置环境test");
 9        }
 10    }

文件4 ProdDBConnector.java

 1    import org.springframework.context.annotation.Configuration;
 2    import org.springframework.context.annotation.Profile;
 3    @Configuration
 4    @Profile("prod")   // 指定多环境配置类标识
 5    public class ProdDBConnector implements DBConnector {
 6        @Override
 7        public void configure() {
 8            System.out.println("数据库配置环境prod");
 9        }
 10    }

上述的三个数据库连接配置的实现类中,在类上都用了@Configuration注解将自定义类声明为配置类,这样可以保证Spring Boot可以自动扫描和识别,同时使用@Profile("xx")注解进行多环境配置声明,并通过属性值进行不同环境标识。在具体的数据库连接配置方法configure()中,示例中只是做了简单的输出语句打印,具体配置可以根据实际开发需求进行编写。

(3)为了激活上述使用@Profile注解构建的多环境配置,需要在项目的resources目录下的全局配置文件application.properties中,配置spring.profiles.active属性来对@Profile("xx")注解标识的多环境配置类进行激活。

需要说明的是,在上一小节演示过程中,在全局配置文件中已经配置了“spring.profiles.active=dev”来激活标识为dev的多环境配置,此处就可以不需要修改了。

(4)为了方便测试@Profile注解效果,在chapter02项目下新建一个com.itheima.controller包,并在该包下创建一个DBController类进行数据库配置连接测试,内容如文件5所示。

文件5 DBController.java

 1    import com.itheima.config.DBConnector;
 2    import org.springframework.beans.factory.annotation.Autowired;
 3    import org.springframework.web.bind.annotation.GetMapping;
 4    import org.springframework.web.bind.annotation.RestController;
 5    @RestController
 6    public class DBController {
 7        @Autowired
 8        private DBConnector dbConnector;
 9        @GetMapping("/showDB")
 10        public void showDB(){
 11            dbConnector.configure();
 12        }
 13    }

文件5中,通过@Autowired注解注入了DBConnector实体类对象,并在showDB()方法调用了多环境配置类中的数据库具体配置。其中,@GetMapping("/showDB")注解将服务请求路径设定为“/showDB”,该注解也是一个组合注解,用于对“/showDB”路径的GET请求方式进行 映射。

(5)完成上述步骤@Profile注解多环境配置类的编写后,直接启动chapter02项目的启动类Chapter02Application,查看控制台输出效果,结果如图1所示。

图1 程序测试效果

从图1可以看出,程序正常启动,并且之前通过Profile文件配置的多环境仍然生效,显示端口号为dev开发环境的端口号8081。

接着,在浏览器上访问“http://localhost:8081/showDB”,查看控制台输出效果,结果如图2所示。

图2 程序测试效果

从图2可以看出,根据映射规则和服务端口号,正确请求到了对应的数据库连接配置方法,并在控制台打印出了指定标识为dev的数据库配置信息。这也就说明,无论使用Profile文件还是@Profile注解类都可以进行多环境配置,并且相互之间不会干扰。

点击此处
隐藏目录