目录
Springboot这个注解说白了就是用于区分有些组件、类、方法在不同环境下是否要注入启动的一个注解,打个比方我有个swagger配置类,只要注入这个类在spring中我就可以使用Swaggger这个插件,但我想让他在dev环境下启动,在生产prod下不在启动。那就需要这个注解就行了,他会根据配置文件,进行当前环境识别进而决定是否加载对应有此注解的方法、类等。
配置类:在配置类上使用 @Profile
来加载特定环境的配置。
不同环境下的配置,如开发(dev)、测试(test)和生产(prod)环境
组件类:在组件(如 @Bean
、@Service
、@Component
等)上使用 @Profile
来限制在特定配置文件激活时才创建。
方法级别:在配置类中的方法上使用 @Profile
,使得只有在特定配置文件激活时,对应的 @Bean
方法才会被调用。
@Configuration
@Profile("dev")
public class DevConfig {
// 配置仅在 'dev' 配置文件激活时应用
}
@Service
@Profile({"test", "prod"})
public class MyService {
// 该服务仅在 'test' 或 'prod' 配置文件激活时创建
}
@Configuration
public class AppConfig {
@Bean
@Profile("prod")
public MyBean prodBean() {
// 该 Bean 仅在 'prod' 配置文件激活时创建
}
}
组合使用:你可以将多个配置文件指定到一个组件上,如 @Profile({"dev", "test"})
,这意味着组件会在任一指定的配置文件激活时被注册。
否定表达式:@Profile
支持使用 !
进行否定表达式,例如 @Profile("!prod")
,这表示在非生产环境下激活该组件。
配置文件可以通过多种方式激活:
SPRING_PROFILES_ACTIVE
环境变量。--spring.profiles.active=dev
。(全局变量设置方式,一般没这么干的)application.properties
或 application.yml
文件中设置 spring.profiles.active
。/**
* 在"uat","dev","local","sit"开发环境设置跨域允许
* @return
*/
@Profile({"uat","dev","local","sit"})
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
//对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!小弟在这拜谢了!
如果您觉得我的文章在某些地方写的不尽人意或者写的不对,从而让你对你人生观产生颠覆(概不负责),需要斧正,麻烦在评论区不吝赐教,作者看到后会根据您的提示查阅文章进行修改,还这世间一个公理一片蓝天