Profile:Spring提供的根据当前的环境,动态的激活和切换一系列组件的功能
@Profile 注解:指定组件在哪个环境下才能注册到容器中生效,如果不指定,则在任何环境下都能使用该组件
- 注解在使用了 @Component、@Service、@Controller、@Configuration 等标识的组件上,指定该组件的生效环境
- 注解在配置类的组件上,表示该组件的生效环境,默认环境为 default
- 当配置类中的组件没有使用 @Profile 注解,说明该组件任何环境都生效
注解在配置类上,只有指定的环境才能使用该配置类
@Configurationpublic class DemoConfig {@Bean@Profile("default") // 表示该组件为默认的环境public DataSource dataSourceDefault() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/default");dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");return dataSource;}@Bean@Profile("prod") // 表示该组件为生产环境用public DataSource dataSourceProd() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/prod");dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");return dataSource;}@Bean@Profile("test") // 表示该组件为测试环境用public DataSource dataSourceTest() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUsername("root");dataSource.setPassword("password");dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test");dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");return dataSource;}}
激活相应的Profile:
1、在虚拟机启动参数中进行设置:-Dspring.profiles.active = test
2、在容器启动时进行指定:
public static void main(String[] args) {// 使用无参构造创建容器对象AnnotationConfigApplicationContext context =new AnnotationConfigApplicationContext();// 设置容器的相关属性// 激活test环境context.getEnvironment().setActiveProfiles("test");// 注册主配置类context.register(DemoConfig.class);// 启动刷新容器context.refresh();}
