복붙노트

[SPRING] 환경 조건에 따른 스프링 와이어 링

SPRING

환경 조건에 따른 스프링 와이어 링

Spring 배선을 사용하면 인터페이스 구현이 여러 개있는 경우 @Qualifier를 사용하여 원하는 것을 지정할 수 있습니다.

예 : 내가

@Component
@Qualifier("Toyota")
public class Toyota implements Car

@Component
@Qualifier("Bmv")
public class Bmv implements Car

그런 다음 특정 구현을 선택할 수 있습니다.

  @Qualifier("Toyota") Car car 

그러나 환경을 기반으로 구현을 선택하는 방법이 있습니까?

나. 내가 spring.profiles.active를 local로 설정하면 Car의 'Toyota'구현을 선택 하겠지만 spring.profiles.active가 dev 또는 stage로 설정된 경우 Car의 'Bmv'구현을 선택하겠습니까?

정확한 구문의 예가 ​​인정 될 것입니다.

해결법

  1. ==============================

    1.아, 그 해결책은 실제로 아주 간단합니다.

    아, 그 해결책은 실제로 아주 간단합니다.

    @Component
    @Qualifier("Bmv")
    @Profile("!dev")
    public class Bmv implements Car
    

    @Component
    @Qualifier("Toyota")
    @Profile("dev")
    public class Toyota implements Car
    

    이렇게하면, 자동차의 배선은 개발 환경에 Toyota를 사용하고 그렇지 않으면 Bmv를 사용합니다.

  2. ==============================

    2.다음 코드와 같이 매개 변수 {spring.profiles.active}로 필요한 것을 구현 및 삽입 할 수 있습니다.

    다음 코드와 같이 매개 변수 {spring.profiles.active}로 필요한 것을 구현 및 삽입 할 수 있습니다.

    @autowired
    private Car Toyota;
    @autowired
    private Car Bmv;
    
    public Car getCar(){
      if(spring.profiles.active is local){
            return Toyota;
      }else{
            return  bmv;
      }
    }
    
  3. ==============================

    3.Spring 3.1에서 환경 프로파일 소개 : http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/

    Spring 3.1에서 환경 프로파일 소개 : http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/

    필자는 개인적으로 한정어를 좋아하지 않으며 코드에서 제안한 방식대로 실제로 사용하면 결합하지 않고 구현에 결합합니다. Jason이 제안한 @Autowired 요소를 사용할 수 있지만 다음과 같이 빈 프로파일과 결합하면된다.

                              

    그런 다음 환경을 만들 때 프로필을 지정합니다.

         디스패처      org.springframework.web.servlet.DispatcherServlet               spring.profiles.active          생산     

  4. from https://stackoverflow.com/questions/16600425/spring-wiring-conditional-to-an-environment by cc-by-sa and MIT license