在春天,@Profile和@ActiveProfiles有什么区别

2022-09-01 01:34:20

在弹簧测试配置上使用@Profile和@ActiveProfiles有什么区别

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

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

答案 1

弹簧配置文件提供了一种分离应用程序配置部分的方法。

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

要将配置文件标记为活动状态,必须在中设置属性或将其作为 VM 参数指定为spring.profiles.activeapplication.properties-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());
    }
}

因此,如果您想在配置文件中运行 junit 测试用例,则必须使用注释。这将加载在开发配置文件中定义的数据源配置 Bean。dev@ActiveProfile('dev')

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

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

}

结论

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

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


答案 2

简而言之,定义一个配置文件,如调试配置文件和生产配置文件等...但是,在应用程序上下文的情况下,并定义了如果使用相应的配置文件,哪些配置文件应处于活动状态。@Profile@ActiveProfilesApplicationContext

正如JavaDoc of Spring官方网站中提到的:

@Profile

概要文件是一种命名的逻辑分组,可以通过 ConfigurableEnvironment.setActiveProfiles(java.lang.String...) 以编程方式激活,也可以通过将 spring.profiles.active 属性设置为 JVM 系统属性、环境变量或 Web 应用程序中的 Servlet 上下文参数来声明性地.xml。配置文件也可以在集成测试中通过@ActiveProfiles注释以声明方式激活。

@ActiveProfiles

ActiveProfiles 是一个类级注释,用于声明在为测试类装入 ApplicationContext 时应使用哪些活动 Bean 定义配置文件。

此外,您可以在此处查看有关@Profile


推荐