gpt4 book ai didi

java - 在 Spring 中,@Profile 和 @ActiveProfiles 有什么区别

转载 作者:IT老高 更新时间:2023-10-28 13:46:57 26 4
gpt4 key购买 nike

在 Spring Test 配置中使用 @Profile 和 @ActiveProfiles 有什么区别

@Configuration
@EnableRetry
@ActiveProfiles("unittest")
static class ContextConfiguration {

@Configuration
@EnableRetry
@Profile("unittest")
static class ContextConfiguration {

最佳答案

Spring Profiles 提供了一种分离应用程序配置部分的方法。

任何 @Component@Configuration 都可以用 @Profile 标记以限制何时加载,这意味着组件或配置将被仅当 Activity 配置文件与映射到组件的配置文件相同时才在应用程序上下文中加载。

要将配置文件标记为 Activity ,必须在 application.properties 中设置 spring.profiles.active 属性或作为 VM 参数给出 -Dspring.profiles .active=dev

在编写 Junit 时,您可能希望激活一些配置文件以加载所需的配置或组件。同样可以通过使用 @ActiveProfile 注释来实现。

考虑一个映射到配置文件dev

的配置类
@Configuration
@Profile("dev")
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost/test");
ds.setUsername("root");
ds.setPassword("mnrpass");
return ds;
}

@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}

考虑一个映射到配置文件prod

的配置类
@Configuration
@Profile("prod")
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:oracle://xxx.xxx.xx.xxx/prod");
ds.setUsername("dbuser");
ds.setPassword("prodPass123");
return ds;
}

@Bean
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource());
}
}

所以,如果你想在 dev 配置文件中运行你的 junit 测试用例,那么你必须使用 @ActiveProfile('dev') 注释。这将加载在 dev 配置文件中定义的 DataSourceConfig bean。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@ActiveProfiles("dev")
public class Tests{

// Junit Test cases will use the 'dev' profile DataSource Configuration

}

Conclusion

@Profile 用于将类映射到配置文件

@ActiveProfile 用于在 junit 测试类执行期间激活特定配置文件

关于java - 在 Spring 中,@Profile 和 @ActiveProfiles 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com