자바 경로 (Path) 및 사용법 정리
나중에 또 잊어버리는것을 방지하고자 ;; 시간날때마다 하나씩 정리해둡니다.
케이스 1. 스프링 플젝에서 설정을 외부로 빼기위해, 자바 프로퍼티 파일을 사용
- 위의 this 위치에 파일을 생성하여 봅니다. src/main/resources 폴더는 스프링 프로젝트 만들면
자동으로 생기더라구요
- 해당 프로젝트를 war 로 만들면 WEB-INF/classes/ 폴더아래에 WMOSConfig.properties 파일이
위치해 있군요.
- 클래스 로더를 사용해서 파일을 가져오도록 해봅니다.
테스트)
String config ="resources/WMOSConfig.properties"; <-- 이거 안됩니다. 아래처럼 경로를
String config = "WMOSConfig.properties";
ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
URL url = ClassLoader.getSystemResource(config); <--- 안됨
URL url2 = currentThreadClassLoader.getResource(config); <---- 잘됨
Thread.currentThread().getContextClassLoader(); <-- 이렇게 얻어온 클래스로더만 작동합니다.
* 웹 애플리케이션은 웹 컨테이너 안에서 실행되며, 각각의 웹 어플리케이션은 자신의 클래스 로더를 가짐.
위의 WEB-INF/classes/ 경로는 웹어플리케이션의 클래스로더가 인지함.
솔루션)
- WMOSConfig.properties 파일안의 내용
trams-ip = 127.0.0.1
- 파일 내용 읽어오기
Properties prop = new Properties();
ClassLoader cl;
cl = Thread.currentThread().getContextClassLoader();
URL url = cl.getResource("WMOSConfig.properties");
prop.load(url.openStream());
String ip = prop.getProperty("trams-ip");
System.out.println(ip); <--- 127.0.0.1
케이스 2. log4j 의 파일 appender 에서 로그파일 위치는?
<!-- 날짜별 로그 -->
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="D:/testlogs/dailyout.log"/>
.....
</appender>
이렇게 하면 당연히, D:/testlogs/ 폴더에 날짜별로 생겨납니다.
<!-- 날짜별 로그 -->
<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="./testlogs/mytestlog.log"/>
.....
</appender>
어떻게 될까요?
저기에서 ./ 는 WAS 시작된 위치가 현재 디렉토리입니다. 따라서 톰캣을 사용한다면
Tomcat 7.0/testlogs / 폴더에 날짜별로 생겨납니다.