在Spring测试配置中使用@Profile和@ActiveProfiles有什么区别
@Configuration
@EnableRetry
@ActiveProfiles("unittest")
static class ContextConfiguration {
和
@Configuration
@EnableRetry
@Profile("unittest")
static class ContextConfiguration {
任何@Component或@Configuration都可以用@Profile标记,以限制它何时被加载。
您为以下内容定义了@Profile
:
@Component
注释,包括@Configuration
类@Bean
注释的方法然后,在测试时,通过在@ActiveProfiles
中指定配置文件来选择所需的配置文件。
ActiveProfiles是一个类级注释,用于声明在加载测试类的ApplicationContext时应使用哪些活动bean定义概要文件。
如果在测试上下文之外使用,它没有效果。
您将配置文件分配给具有@Profile
的组件;在测试时,使用@ActiveProfiles
选择它们,在开发时使用spring.profiles.active
属性选择它们。
简而言之,@Profile
定义了一个配置文件,如调试配置文件和生产配置文件等...但是@ActiveProfiles
在Application Context
的情况下出现,并定义了如果使用相应的Application Context
,哪些配置文件应该是活动的。
如Spring官方网站JavaDoc中所述:
@简介
概要文件是一种命名的逻辑分组,可以通过 ConfigurableEnvironment.setActiveProfiles(java.lang.String...) 以编程方式激活,也可以通过将 spring.profiles.active 属性设置为 JVM 系统属性、环境变量或 Web 应用程序中的 Servlet 上下文参数来声明性地.xml。配置文件也可以在集成测试中通过@ActiveProfiles注释以声明方式激活。
@ActiveProfiles
ActiveProfiles是一个类级注释,用于声明在加载测试类的ApplicationContext时应使用哪些活动bean定义概要文件。
另外,你可以在这里看到更多关于@Profile的信息
Spring Profiles提供了一种隔离应用程序配置的方法。
任何@组件
或配置
都可以标记为@Profile
,以限制其加载时间,这意味着只有当活动配置文件与映射到组件的配置文件相同时,才会在应用程序上下文中加载组件或配置。
要将配置文件标记为活动的,必须在< code > application . properties 中设置< code > spring . profiles . active 属性,或者作为VM参数以< code >-dspring . profiles . active = dev 的形式给出
在编写Junit时,您可能想要激活某个概要文件,以便加载所需的配置或组件。使用< code>@ActiveProfile注释也可以达到同样的效果。
考虑映射到配置文件< code>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());
}
}
考虑映射到配置文件< code>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')
annotation。这将加载在开发概要文件中定义的DataSourceConfig bean。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@ActiveProfiles("dev")
public class Tests{
// Junit Test cases will use the 'dev' profile DataSource Configuration
}
结论
@Profile
用于将类映射到配置文件
@ActiveProfile
用于在jUnit测试类执行期间激活特定配置文件
问题内容: 我只是想知道为什么我们通常在两个布尔之间使用逻辑OR 而不是按位OR ,尽管它们都运行良好。 我的意思是,请看以下内容: 我们可以代替使用吗?与和相同。 问题答案: 如果您使用和形式,而不是这些运算符的和形式,则Java不会费心地单独评估右手操作数。 这是您是否希望缩短评估时间的问题-在 大多数情况 下都是如此。 说明短路好处的一个好方法是考虑以下示例。 正如Jeremy和Peter提
问题内容: 我在看一些模拟的OCJP问题。我遇到了一个非常令人困惑的语法。这里是: 为什么输出在和之间变化? 问题答案: 问题只是和您玩弄混乱的空格。 是通常的(不等于)比较。 另一方面: 最好写成如下形式: 因此,这是两个运算符。 首先反转。 然后将其分配回。 赋值运算符返回分配的值。因此,计算结果为true-这就是您要打印的内容。
只需在Xpath中添加即可--它突出显示--各种页面元素----它表示什么? 下面是用于Gmail密码字段的XPaths。的意义是什么? >
本文向大家介绍Spring Boot、Spring MVC 和 Spring 有什么区别?相关面试题,主要包含被问及Spring Boot、Spring MVC 和 Spring 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 SpringFramework SpringFramework 最重要的特征是依赖注入。所有 SpringModules 不是依赖注入就是 IOC 控制反转。 当我
Spring Boot中的和注释有什么区别?有必要加上这些吗?我的应用程序在没有这些注释的情况下工作得很好。我只想明白为什么我们要加上它们。
本文向大家介绍Dubbo 和 Spring Cloud 有什么区别?相关面试题,主要包含被问及Dubbo 和 Spring Cloud 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 两个没关联,如果硬要说区别,有以下几点。 1)通信方式不同 Dubbo 使用的是 RPC 通信,而 Spring Cloud 使用的是 HTTP RESTFul 方式。 2)组成部分不同 最大的区别:Dubb