n Spring 3.2를 사용하여 Spring MVC 웹 앱을 개발 중입니다. 우리는 다른 고객에게 웹 앱을 배포 할 것입니다. 각 고객은 서비스 인터페이스의 여러 구현 중 하나를 사용할 수 있습니다.은 속성 값을 기반으로 Spring bean을 autowire합니다.
고객이이 값을 재설정해야 할 수 있으므로 구현을 응용 프로그램에 하드 와이어 할 수 없으므로 외부에서 구성 할 수 있어야합니다. 우리는 이미 문자열, 숫자 등과 같은 간단한 속성을 설정하기위한 고객 별 속성 파일을 사용하고 있지만 인터페이스의 특정 구현을 설정하는 방법을 묻습니다.
예,
class MyClass {
// this is straightforward
@Value("${customer.propertyInPropertyFile}")
private String customerSpecificString;
// how to set the correct implementation for each customer?
private ISomeService service;
}
ISomeService 4 구현이있는 경우, 우리는 autowire하기 수 없거나, 이것은 다음 컴파일 된 코드에 설정됩니다 명시 적으로, 빈을 설정 - 그것은 구성 할 필요가있다 응용 프로그램을 배포 한 후 (필요한 경우 응용 프로그램을 다시 시작하는 것이 좋습니다) ..
누구든지이 작업을 수행하는 방법을 알고 있습니까? 이것이 Spring EL 또는 프로파일을 사용하여 더 잘 수행 될 수 있습니까?
감사합니다. -는 config 클래스에 대해 알 필요가
@Configuration
@Profile("prod")
@EnableAsync
public class ProductionConfig extends BaseConfig
// inject property value which identifies theimplementation to use
Value("${service.impl}")
private String serviceName;
@Bean()
public IRepository repository() {
IRepository rc = null;
if(StringUtils.isEmpty(serviceName)){
rc = new Impl1();
} else if ("sword-mets".equals(serviceName)){
rc = new Impl2();
} else {
rc = new Impl3();
}
log.info("Setting in repository implementation " + rc);
return rc;
}
그래서,이 별명을 사용하여 제안 된 응답으로 매우 깨끗한되지 않습니다 : 내가 자바 구성을 사용하기 원하는대로
[Spring Qualifier와 속성 자리 표시 자] 가능한 복제본 (http://stackoverflow.com/questions/7812745/spring-qualifier-and-property-placeholder) –
[spring profiles] (https :// /spring.io/blog/2011/02/14/spring-3-1-m1-introducing-profile/). –
첫 번째 링크를 살펴 보았는데, 별칭과 XML 구성을 사용하고 있습니다. 자바 주석 구성을 사용하고 싶었지만 어노테이션 값이 컴파일 타임 상수이기 때문에 불가능할 수도 있습니다. Spring 설정 파일에서 동일한 $ {} 표기법이 Maven 빌드 중에 대체 된 변수를 식별하므로 컴파일 타임에 빌드 할 때 대체되는 속성을 구별하는 방법을 알아야합니다. – otter606