Spring的Profile注解
使用场景
@Profile注解是spring提供的一个用来标明当前运行环境的注解。我们正常开发的过程中经常遇到的问题是,开发环境是一套环境,测试是一套环境,线上部署又是一套环境。这样从开发到测试再到部署,会对程序中的配置修改多次,尤其是从测试到上线这个环节,让测试的也不敢保证改了哪个配置之后能不能在线上运行。为了解决上面的问题,我们一般会使用一种方法,就是针对不同的环境进行不同的配置,从而在不同的场景中跑我们的程序。
而spring中的@Profile注解的作用就体现在这里。在spring使用DI来注入的时候,能够根据当前制定的运行环境来注入相应的bean。最常见的就是使用不同DataSource了。
java类
/**
* @author WGR
* @create 2020/9/16 -- 20:13
*/
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
/**
* @return
*/
@Bean("dataSource")
@Profile("dev")
public DruidDataSource createDevDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setMaxActive(10);
return dataSource;
}
/**
* @return
*/
@Bean("dataSource")
@Profile("test")
public DruidDataSource createTestDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setMaxActive(50);
return dataSource;
}
/**
* @return
*/
@Bean("dataSource")
@Profile("produce")
public DruidDataSource createProduceDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setMaxActive(100);
return dataSource;
}
}
/**
* @author WGR
* @create 2020/9/14 -- 20:41
*/
@Configuration
@PropertySource({"jdbc.properties"})
@Import(JdbcConfig.class)
public class SpirngConfigure {
}
//测试方法
/**
* @author WGR
* @create 2020/9/20 -- 14:35
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpirngConfigure.class)
@ActiveProfiles("test")
public class SpringProfileTest {
@Autowired(required = false)
private DruidDataSource druidDataSource;
@Test
public void testProfile() {
System.out.println(druidDataSource.getMaxActive());
}
}
测试结果