prosource

봄에 @Profile과 @ActiveProfiles의 차이점은 무엇입니까?

probook 2023. 8. 21. 21:24
반응형

봄에 @Profile과 @ActiveProfiles의 차이점은 무엇입니까?

스프링 테스트 구성에서 @Profile 및 @ActiveProfile을 사용하는 경우의 차이점은 무엇입니까?

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

그리고.

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

스프링 프로파일은 응용프로그램 구성의 일부를 분리할 수 있는 방법을 제공합니다.

조금도@Component또는@Configuration으로 표시할 수 있습니다.@Profile로드되는 시간을 제한합니다. 즉, 활성 프로필이 구성 요소에 매핑된 프로필과 동일한 경우에만 구성 요소 또는 구성이 응용 프로그램 컨텍스트에 로드됩니다.

프로파일을 활성화하려면,spring.profiles.active속성을 설정해야 합니다.application.propertiesVM 인수로 지정할 수 있습니다.-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프로필을 사용해야 합니다.@ActiveProfile('dev')주석dev 프로파일에 정의된 DataSourceConfig가 로드됩니다.

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

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

}

결론

@Profile클래스를 프로파일에 매핑하는 데 사용됩니다.

@ActiveProfileJunit 테스트 클래스 실행 중에 특정 프로필을 활성화하는 데 사용됩니다.

요컨대,@Profile디버그 프로필 및 프로덕션 프로필 등과 같은 프로필을 정의합니다.하지만@ActiveProfiles의 경우 사진에 나타나고 각각의 경우 활성화되어야 하는 프로필을 정의합니다.ApplicationContext사용 중입니다.

봄의 JavaDoc 공식 웹사이트에서 언급한 바와 같이:

@프로필

프로파일은 구성 가능한 환경을 통해 프로그래밍 방식으로 활성화할 수 있는 명명된 논리적 그룹입니다.setActiveProfiles(java.lang)를 지정합니다.String...) 또는 spring.profiles.active 속성을 JVM 시스템 속성, 환경 변수 또는 웹 응용 프로그램의 web.xml에 있는 Servlet 컨텍스트 매개 변수로 설정하여 선언적으로 지정합니다.프로파일은 @ActiveProfiles 주석을 통해 통합 테스트에서 선언적으로 활성화될 수도 있습니다.

@활성 프로필

ActiveProfiles는 클래스에 대한 ApplicationContext를 로드할 때 사용할 활성 빈 정의 프로파일을 선언하는 데 사용되는 클래스 수준 주석입니다.

또한 @Profile에 대한 자세한 내용은 여기를 참조하십시오.

@Component 또는 @Configuration은 로드 시 제한할 @Profile로 표시할 수 있습니다.

은 사자정의를 합니다.@Profile사용자:

  1. 클래스 - 설명 또는 간접 주석이 달린@Component를 포함하여, 을 포함하여@Configuration »
  2. 린방법으로 이 달린 방법@Bean

그런 다음 테스트하는 동안 다음에 지정하여 원하는 프로파일을 선택합니다.@ActiveProfiles.

ActiveProfiles는 클래스에 대한 ApplicationContext를 로드할 때 사용할 활성 빈 정의 프로파일을 선언하는 데 사용되는 클래스 수준 주석입니다.

테스트 컨텍스트 밖에서 사용할 경우에는 아무런 효과가 없습니다.

요약

은 다음용을구할당프로다니합을일파로 당신의 합니다.@Profile테스트하는 동안 다음 항목으로 선택합니다.@ActiveProfiles하면서 발하는동선택다니합안개▁them다▁with니로 합니다.spring.profiles.active소유물.

@Profile는 다른 다른것을데는사다니됩용하를 할 때 됩니다.@Bean에 대한 양한컨텍대에정한의예트스, 다:

public class BeanConfiguration {
    @Bean
    @Profile({"local", "dev", "ci-dev", "homolog"})
    public SomeHttpClientBean adyenClientFactorySandbox() {
        return SomeHttpClientBean.builder()
            .url("https://test.example.com")
            .build();
    }

    @Bean
    @Profile("prod")
    public SomeHttpClientBean adyenClientFactorySandbox() {
        return SomeHttpClientBean.builder()
            .url("https://production.example.com")
            .build();
    }
}

됩니다.spring.profiles.active속성 또는 클래스에 주석을 달아서:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@ActiveProfiles("ci-dev")
public class SpringBootTestBase {
    @Test
    ...
}
  • 와 함께@Profile빈 정의에 조건을 설정한 주석. 현재 활성 프로파일에 따라 스프링 컨텍스트에서 이 빈을 작성하거나 작성하지 않습니다.JavaDoc 예:

    @Profile({"p1", "!p2"}등록은 프로파일 'p1'이 활성화되거나 프로파일 'p2'가 활성화되지 않은 경우에 발생합니다.

  • 와 함께@ActiveProfiles현재 활성 프로필을 설정합니다. 예:

    @ActiveProfiles({"p2","p3"})이 달린 콩@Profile({"p1", "!p2"}생성되지 않습니다.

    @ActiveProfiles({"p3"})이 달린 콩@Profile({"p1", "!p2"}생성됩니다.

    @ActiveProfiles({"p1"})이 달린 콩@Profile({"p1", "!p2"}생성됩니다.

@Profile빈 또는 구성을 선언할 때 사용됩니다.@ProfileBean 또는 구성이 속한 프로파일을 선언합니다.

@ActiveProfiles하나 이상의 프로필을 활성화하기 위해 빈 또는 구성을 사용하는 테스트에서만 사용됩니다.

@ActiveProfiles에서 빈 에 " Context"라는 주석이 확인합니다.@Profile만약 그렇다면, 그 빈 또는 구성은 프로파일이 다음과 같은 경우에만 로드됩니다.@ActiveProfiles콩의프일규일치칙다니합과파로에 있는 합니다.@Profile 주석

언급URL : https://stackoverflow.com/questions/44055969/in-spring-what-is-the-difference-between-profile-and-activeprofiles

반응형