-
[JAVA Intellij] Maven-Profile을 적용하여 Resources폴더 환경에 맞게 관리하기프로그래밍/Java 2022. 5. 24. 09:07반응형
목적
- Maven을 이용하여 local(로컬), dev(개발), prod(사용) 서버를 다르게 조작하여 간편하게 db접속 정보를 바꾸는 작업을 진행
목표
- java 소스에 resource 폴더를 여러개로 분리(local, dev, prod)
- Maven profiles 설정
- 각각에 환경에 맞는 db 정보가 담긴 Properties생성
- resource에서 properties 파일 불러와 내용 읽기
java 소스에 resource 폴더를 여러개로 분리(local, dev, prod)
resource 파일을 local(로컬 개발), dev(테스트), prod(상용버전) 별로 만들어 주었음
Maven profiles 설정
각각 환경에 맞게 DB정보를 변경할 수 있도록 설정 아래 와 같이 작성하면 선택한 프로필의 Properties가 설정이 되어 env라는 변수를 사용할 수 있게 됨 동적으로 변경이 되므로 resources-${env}에서 local, dev, prod가 들어가 resource폴더를 따로 설정하지 않아도 Profile만 설정하면 바로 적용되게끔 설정이 된것임
<project> <build> ... <resources> <resource> <directory>src/main/resources-${env}</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> <include>**/*.settings</include> </includes> </resource> </resources> ... </build> <profiles> <profile> <id>local</id> <properties> <env>local</env> </properties> </profile> <profile> <id>dev</id> <properties> <env>dev</env> </properties> </profile> <profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile> </profiles> ... </project>
위와 같이 설정하면 intellij오른쪽에 Maven 설정 탭 안에 Profiles가 보이게 되고 선택한 것으로 Profile이 설정이 되어 바로 resource 폴더가 적용 된것을 볼수 있을 것임. 이렇게 설정하여 개발 할 때는 local 테스트는 dev, 상용버전 만들 때는 prod로 설정이 가능
db.properties
이제는 properties에 대해 설정을 해주면 끝남 각각 환경에 맞게 db.properties를 생성 대충 아래와 같은 느낌으로 생성해 주었음
db.drivername=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://localhost:3306/dbName?characterEncoding=UTF-8&serverTimezone=UTC db.username=root db.password=1234
resource에서 properties 파일 불러와 내용 읽기
소스에서 getClass().getClassLoader().getResource("파일명")을 이용하여 Profile에서 바라보고 있는 resource폴더의 파일을 쉽게 찾을 수 있음. 이것을 Path를 이용하여 주소를 탐색 및 fileInputStream으로 파일을 불러와 주면 바로 사용 할 수 있고, Properties를 사용하기 위해서 Properties객체를 사용 안에 있는 내용을 읽으면 완성
public void setDBProperties() { File file = null; FileInputStream fis = null; Properties properties = null; URL resource = null; try { // db.properties파일 주소 가져오기 // getClass().getClassLoader().getResource = /src/main/resources-${env}/db.properties resource = getClass().getClassLoader().getResource("db.properties"); // resource주소 uri로 바꾼 후 file추출 file = Paths.get(resource.toURI()).toFile(); // file의 절대 주소를 사용하여 filesystem에 input - ex : home/user/desktop/src/main/resources/db.properties fis = new FileInputStream(file.getAbsolutePath()); // Properties객체를 이용 properties = new Properties(); // load 함수를 이용하여 불러오기 properties.load(new java.io.BufferedInputStream(fis)); // getProperty를 이용하여 key를 넣어 값을 얻어오기 driverName = properties.getProperty("db.drivername"); // com.mysql.cj.jdbc.Driver dbUrl = properties.getProperty("db.url"); //jdbc:mysql://localhost:3306/dbName?characterEncoding=UTF-8&serverTimezone=UTC userName = properties.getProperty("db.username"); //root password = properties.getProperty("db.password"); //1234 } catch (URISyntaxException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } }
반응형'프로그래밍 > Java' 카테고리의 다른 글
[JAVA]객체 지향 디자인 패턴 - Composite Pattern(컴포지트 패턴) (0) 2022.03.29 [JAVA]객체 지향 디자인 패턴 - Mediator Pattern(중재자 패턴) (0) 2022.03.28 [JAVA]객체 지향 디자인 패턴 - Factory Pattern(팩토리 패턴) (0) 2022.03.28 [JAVA]객체 지향 디자인 패턴 - Decorator Pattern(장식자 패턴) (0) 2022.03.24 [JAVA]객체 지향 디자인 패턴 - Template Method Pattern(탬플릿 메소드 패턴) (0) 2022.03.23