Spring Profile注释示例
时间:2020-02-23 14:35:57 来源:igfitidea点击:
在本教程中,我们将看到Spring @Profile注释。
本教程是Spring启动配置文件示例的扩展名。
配置文件注释表示命名逻辑分组可以通过
- 通过使用
ConfigurableEnvironment.setActiveProfiles(java.lang.String...)
- 通过设置
spring.profiles.active
属性作为JVM系统属性,作为环境变量,或者在Web中作为servlet上下文参数。
用于Web应用程序的XML。
- 你也可以使用
@ActiveProfiles
<同时进行集成测试
@profile注释可以以以下任何方式使用:
- 作为直接或者间接注释的任何类的类型级注释,包括@configuration类
- 作为元注释,出于撰写自定义刻板印象注释的原因
- 它可以使用任何@Bean注释的方法级注释
让我们在一个例子的帮助下看看。
第1步:转到"https://start.spring.io/"并根据下面的屏幕截图创建Spring启动项目。
第2步:在Eclipse中导入Maven项目。
第3步:创建名为"org.igi.theitroad.model"的包创建名为"customer.java"的型号类
package org.igi.theitroad.model; public class Customer { int id; String name; String email; public Customer(int id, String name, String email) { super(); this.id = id; this.name = name; this.email = email; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
第4步:创建名为"org.igi.theitroad.config"的包创建一个名为"configurationDatabase.java"的配置类
package org.igi.theitroad.config; import org.igi.theitroad.model.Customer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration public class ConfigurationDatabase { @Profile("dev") @Bean(name="customer") public Customer getDevCustomer() { return new Customer(1,"John","[email protected]"); } @Profile("prod") @Bean(name="customer") public Customer getProdCustomer() { return new Customer(1,"Martin","[email protected]"); } }
第5步:在SRC/TEST/JAVA中创建名为"springprofileannotationdevtest的测试类"。
package org.igi.theitroad.SpringProfileAnnotation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.igi.theitroad.config.ConfigurationDatabase; import org.igi.theitroad.model.Customer; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringRunner.class) @SpringBootTest @ActiveProfiles(value="dev") @ContextConfiguration(classes= {ConfigurationDatabase.class},loader=AnnotationConfigContextLoader.class) public class SpringProfileAnnotationDevTest { @Autowired private ApplicationContext applicationContext; @Test public void testDevDataSource() { Customer customer = (Customer)applicationContext.getBean("customer"); assertNotNull(customer); assertEquals("John", customer.getName()); } }
其中
@springboottest注释用于运行Spring启动测试。
@ContextConfiguration提供类级元数据,以确定如何加载和配置ApplicationContext进行集成测试。
@activeProfiles用于提供在运行集成测试时将激活的配置文件的名称。
步骤6:运行测试时运行上述测试,我们将得到以下输出:
第7步:在src/test/java中创建名为"springprofileannotationProdtest"的另一个测试类。
创建一个名为"springboothelworldapplication.java"的类
package org.igi.theitroad.SpringProfileAnnotation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import org.igi.theitroad.config.ConfigurationDatabase; import org.igi.theitroad.model.Customer; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringRunner.class) @SpringBootTest @ActiveProfiles(value="prod") @ContextConfiguration(classes= {ConfigurationDatabase.class},loader=AnnotationConfigContextLoader.class) public class SpringProfileAnnotationProdTest { @Autowired private ApplicationContext applicationContext; @Test public void testDevDataSource() { Customer customer = (Customer)applicationContext.getBean("customer"); assertNotNull(customer); assertEquals("Martin", customer.getName()); } }
步骤8:运行测试时运行上述测试,我们将根据活动配置文件获得不同的bean。