설정값 프로퍼티 클래스
- 로컬, 개발, 운영환경에서 프로젝트에 필요한 설정(Config, Properties)을 각각 관리하기 위해서
클래스를 만들고 프로퍼티의 내용을 변수에 매핑한 후,
만든 클래스를 @Bean으로 등록한 후 사용하고 싶은 곳에서 @Autowored를 사용해 간단하게 사용 - 수정이 발생하면 프로퍼티 값 또는 변수만 변경하면 됨
@PostConstuct로 설정값 프로퍼티 클래스 관리
- globals 폴더에 global-local, global-dev, global-prod 3개의 프로퍼티 파일 생성
// global-dev.properties
uploadFile.path = /app/upload/
// global-local.properties
uploadFile.path = /home/upload/
// global-prod.properties
uploadFile.path = /root/upload/
- GlobalConfig 클래스 생성
개발, 로컬, 운영에 따른 프로퍼티 파일의 내용을 변수에 매핑하는 클래스로
백엔드 서버 개발을 할 때 파일 업로드, REST API 인증정보, 각종 설정값을 관리함
activeProfile이 없을 수 있으므로 디폴트값을 local로 해두고, 가져온 프로필 값에 따라 프로퍼티 값이 변하게 됨
public class GlobalConfig {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ApplicationContext context;
@Autowired
private ResourceLoader resourceLoader;
private String uploadFilePath;
private boolean local;
private boolean dev;
private boolean prod;
@PostConstruct
public void init() {
logger.info("init");
String[] activeProfiles = context.getEnvironment().getActiveProfiles(); // 프로필(local, prod, dev)에 따라 프로퍼티 파일을 가져옴
String activeProfile = "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);
// 프로퍼티 파일에 있는 uploadFile.path가 변수에 저장됨
uploadFilePath = properties.getProperty("uploadFile.path");
// local로 서버가 올라올 경우 /home/upload
this.local = activeProfile.equals("local");
// dev로 서버가 올라올 경우 /app/upload
this.dev = activeProfile.equals("dev");
// prod로 서버가 올라올 경우 /root/upload
this.prod = activeProfile.equals("prod");
} catch (Exception e) {
logger.error("e", e);
}
}
public String getUploadFilePath() {
return uploadFilePath;
}
public boolean isLocal() {
return local;
}
public boolean isDev() {
return dev;
}
public boolean isProd() {
return prod;
}
}
- GlobalConfig 클래스를 @Bean으로 등록
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
...
@Bean
public GlobalConfig config() {
return new GlobalConfig();
}
...
}
- 사용을 원하는 클래스에서 @Autowired를 해 사용
@RestController
@RequestMapping("/file")
@Api(tags = "파일 API")
public class FileController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private GlobalConfig config;
/**
* 업로드 리턴
* @return
*/
@GetMapping
@ApiOperation(value = "업로드", notes = "")
public BaseResponse<Boolean> save() {
logger.debug("config : {}", config);
String uploadFilePath = config.getUploadFilePath();
logger.debug("uploadFilePath : {}", uploadFilePath);
return new BaseResponse<Boolean>(true);
}
}
- 결과
local로 서버가 올라오면 local 경로가 나옴

'Java-Spring > 자바 스프링부트 활용 웹개발 실무용' 카테고리의 다른 글
[자바 스프링부트 활용 웹개발 실무용] TypeHandler로 데이터 변환하기 (0) | 2022.08.20 |
---|---|
[자바 스프링부트 활용 웹개발 실무용] cron으로 로컬, 개발, 운영 설정값 프로퍼티에 따른 스케줄러 사용 (0) | 2022.08.18 |
[자바 스프링부트 활용 웹개발 실무용] HandleMethod로 공통 로그인 체크 (0) | 2022.08.16 |
[자바 스프링부트 활용 웹개발 실무용] Mybatis를 이용한 검색, 배열 검색과 페이징 (0) | 2022.08.16 |
[자바 스프링부트 활용 웹개발 실무용] Enum class를 활용해 DB 컬럼 값이 코드일 경우 in out 사용 방법 (0) | 2022.07.26 |
설정값 프로퍼티 클래스
- 로컬, 개발, 운영환경에서 프로젝트에 필요한 설정(Config, Properties)을 각각 관리하기 위해서
클래스를 만들고 프로퍼티의 내용을 변수에 매핑한 후,
만든 클래스를 @Bean으로 등록한 후 사용하고 싶은 곳에서 @Autowored를 사용해 간단하게 사용 - 수정이 발생하면 프로퍼티 값 또는 변수만 변경하면 됨
@PostConstuct로 설정값 프로퍼티 클래스 관리
- globals 폴더에 global-local, global-dev, global-prod 3개의 프로퍼티 파일 생성
// global-dev.properties
uploadFile.path = /app/upload/
// global-local.properties
uploadFile.path = /home/upload/
// global-prod.properties
uploadFile.path = /root/upload/
- GlobalConfig 클래스 생성
개발, 로컬, 운영에 따른 프로퍼티 파일의 내용을 변수에 매핑하는 클래스로
백엔드 서버 개발을 할 때 파일 업로드, REST API 인증정보, 각종 설정값을 관리함
activeProfile이 없을 수 있으므로 디폴트값을 local로 해두고, 가져온 프로필 값에 따라 프로퍼티 값이 변하게 됨
public class GlobalConfig {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private ApplicationContext context;
@Autowired
private ResourceLoader resourceLoader;
private String uploadFilePath;
private boolean local;
private boolean dev;
private boolean prod;
@PostConstruct
public void init() {
logger.info("init");
String[] activeProfiles = context.getEnvironment().getActiveProfiles(); // 프로필(local, prod, dev)에 따라 프로퍼티 파일을 가져옴
String activeProfile = "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);
// 프로퍼티 파일에 있는 uploadFile.path가 변수에 저장됨
uploadFilePath = properties.getProperty("uploadFile.path");
// local로 서버가 올라올 경우 /home/upload
this.local = activeProfile.equals("local");
// dev로 서버가 올라올 경우 /app/upload
this.dev = activeProfile.equals("dev");
// prod로 서버가 올라올 경우 /root/upload
this.prod = activeProfile.equals("prod");
} catch (Exception e) {
logger.error("e", e);
}
}
public String getUploadFilePath() {
return uploadFilePath;
}
public boolean isLocal() {
return local;
}
public boolean isDev() {
return dev;
}
public boolean isProd() {
return prod;
}
}
- GlobalConfig 클래스를 @Bean으로 등록
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
...
@Bean
public GlobalConfig config() {
return new GlobalConfig();
}
...
}
- 사용을 원하는 클래스에서 @Autowired를 해 사용
@RestController
@RequestMapping("/file")
@Api(tags = "파일 API")
public class FileController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private GlobalConfig config;
/**
* 업로드 리턴
* @return
*/
@GetMapping
@ApiOperation(value = "업로드", notes = "")
public BaseResponse<Boolean> save() {
logger.debug("config : {}", config);
String uploadFilePath = config.getUploadFilePath();
logger.debug("uploadFilePath : {}", uploadFilePath);
return new BaseResponse<Boolean>(true);
}
}
- 결과
local로 서버가 올라오면 local 경로가 나옴

'Java-Spring > 자바 스프링부트 활용 웹개발 실무용' 카테고리의 다른 글
[자바 스프링부트 활용 웹개발 실무용] TypeHandler로 데이터 변환하기 (0) | 2022.08.20 |
---|---|
[자바 스프링부트 활용 웹개발 실무용] cron으로 로컬, 개발, 운영 설정값 프로퍼티에 따른 스케줄러 사용 (0) | 2022.08.18 |
[자바 스프링부트 활용 웹개발 실무용] HandleMethod로 공통 로그인 체크 (0) | 2022.08.16 |
[자바 스프링부트 활용 웹개발 실무용] Mybatis를 이용한 검색, 배열 검색과 페이징 (0) | 2022.08.16 |
[자바 스프링부트 활용 웹개발 실무용] Enum class를 활용해 DB 컬럼 값이 코드일 경우 in out 사용 방법 (0) | 2022.07.26 |