1. GlobalConfig
import java.util.Properties; import javax.annotation.PostConstruct; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.support.PropertiesLoaderUtils; import lombok.extern.slf4j.Slf4j; @Slf4j public class GlobalConfig { @Autowired private ApplicationContext context; @Autowired private ResourceLoader resourceLoader; private String uploadFilePath; /** * @PostConstruct는 의존성 주입이 이루어진 후 초기화를 수행하는 메서드이다. * @PostConstruct가 붙은 메서드는 클래스가 service를 수행하기 전에 발생한다. * 이 메서드는 다른 리소스에서 호출되지 않는다해도 수행된다. @PostConstruct의 사용 이유 1) 생성자가 호출되었을 때, 빈은 초기화되지 않았음(의존성 주입이 이루어지지 않았음) 이럴 때 @PostConstruct를 사용하면 의존성 주입이 끝나고 실행됨이 보장되므로 빈의 초기화에 대해서 걱정할 필요가 없다. 2) bean 의 생애주기에서 오직 한 번만 수행된다는 것을 보장한다. (어플리케이션이 실행될 때 한번만 실행됨) 따라서 bean이 여러 번 초기화되는 걸 방지할 수 있다 여기서는, ApplicationContext, ResourceLoader 가 의존성 주입이 완료되었는지에 대해 염려할 필요가 없다. */ @PostConstruct public void init(){ log.info("GlobalConfig-init" ); String[] activeProfiles =context.getEnvironment().getActiveProfiles(); String activeProfile="local"; // 기본위치 local if(ObjectUtils.isNotEmpty(activeProfiles)) { activeProfile=activeProfiles[0]; } String resourcePath=String.format("classpath:globals/global-%s.properties", activeProfile); try { Resource resource=resourceLoader.getResource(resourcePath); Properties properties=PropertiesLoaderUtils.loadProperties(resource); uploadFilePath=properties.getProperty("uploadFile.path"); }catch (Exception e) { log.error("e", e); } } public String getUploadFilePath() { return uploadFilePath; } }
2. WebMvcConfig 에 bin 등록
@Bean public GlobalConfig globalConfig(){ return new GlobalConfig(); }
3. properties 파일 추가
1) global-dev.properties
uploadFile.path= E:/upload/Ateam_upload
2) global-local.properties
uploadFile.path = /home/upload/
3) global-prod.properties
uploadFile.path= /var/www/html/upload
4) 사용 예
FileApiController
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import kr.net.macaronics.configuration.GlobalConfig; import kr.net.macaronics.configuration.http.BaseResponse; import lombok.extern.slf4j.Slf4j; @RestController @RequestMapping("/file") @Api(tags="공통 프로젝트 프로퍼티 로컬, 개발, 운영 설정값 클래스로 관리 테스트 API") @Slf4j public class FileApiController { @Autowired private GlobalConfig globalConfig; @GetMapping("/upload") @ApiOperation(value="업로드", notes = "") public BaseResponse<Boolean> save(){ log.debug("config : {} ", globalConfig); String uploadFilePath=globalConfig.getUploadFilePath(); log.info("uploadFilePath : {} " , uploadFilePath); return new BaseResponse<Boolean>(true); } }
출력 결과 =>
Response body
Download
{ "status": "SUCCESS", "code": "SUCCESS", "message": null, "pageMaker": null, "data": true }
dev, local , prod 테스트 방법
소스
댓글 ( 4)
댓글 남기기