注解:@Profile

@Profile注解的作用是指定类或方法在特定的 Profile 环境生效,任何@Component@Configuration注解的类都可以使用@Profile注解。在使用DI来依赖注入的时候,能够根据@profile标明的环境,将注入符合当前运行环境的相应的bean。

@Prifile修饰类

1
2
3
4
5
6
7
8
9
10
11
@Configuration
@Profile("prod")//特定的配置环境生效,在prod生产环境下生效
public class DataSourceConfig {

@Bean(destroyMethod="")
public DataSource dataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
}

}

@Profile`修饰方法

不同环境生效不同的DataSource Bean

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Configuration
public class AppConfig {

@Bean("dataSource")
@Profile("dev")
public DataSource standaloneDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:com/bank/config/sql/schema.sql")
.addScript("classpath:com/bank/config/sql/test-data.sql")
.build();
}

@Bean("dataSource")
@Profile("prod")
public DataSource jndiDataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
}

}

@Profile修饰注解

1
2
3
4
@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME)
@Profile("prod")
public @interface Production { }

之后可以用@Production 代替@Profile(“prod”)