'분류 전체보기'에 해당되는 글 223건

  1. 2011.10.12 Windows 심볼릭링크 맨들기
  2. 2011.10.11 11번가 바로가기 링크 2
  3. 2011.10.11 A java Runtime Environment(JRE) or Java Development Kit(JDK) must be ~~~~ 하면서 이클립스가 실행안될때. 22
  4. 2011.10.11 Spring 개발시 개발, 운영환경 프로퍼티 파일 관리하기 1
  5. 2011.10.10 Runtime 에 jar 파일 클래스패스에 추가 시키기 : RuntimeJarLoader 1

Windows 심볼릭링크 맨들기

리눅스의 ln 명령어와 비슷한 명령어이다.


mklink 생성될링크파일명 링크시킬파일명

ex) doc.txt 파일의 심볼릭링크 link.txt 파일을 생성한다.
mklink c:\link.txt c:\doc.txt


mklink /d 생성될링크폴더명 링크시킬폴더명

ex) c:\windows 폴더의 심볼릭링크 c:\winlink 폴더를 생성한다.
mklink /d c:\winlink c:\windows

11번가 바로가기 링크


11번가는 주소창에 직접 URL 을 입력해도 바로가기로 접속했다고 인식이 안된다.

그지같이 ActiveX를 설치한 다음 바로가기를 설치해서 고걸로 접속을 해야 바로가기로 인식이 된다. 왜 이렇게 만들었을까 -_-


ActiveX 설치를 병적으로 싫어하는 사람들은 요링크로 접속하면 바로가기로 접속했다고 인식이된다~~

http://www.11st.co.kr/connect/Gateway.tmall?method=Xsite&tid=1000105204 






A java Runtime Environment(JRE) or Java Development Kit(JDK) must be ~~~~ 하면서 이클립스가 실행안될때.

A java Runtime Environment(JRE) or Java Development Kit(JDK) must be available in order to run Eclipe. 요런 팝업창이 뜨면서 이클립스가 실행이 안될때가 있다.




요럴때 해결하는 방법으로 두가지 정도가 있는데

먼저 첫번째 방법은

이클립스가 설치된 폴더에 가보면 eclipse.ini 파일이 있다. 요 파일을 살포시 에디터로 열어서 제일 상단에
-vm 
JDK 설치경로\bin\javaw.exe
요걸 추가시켜 주면된다.



예를들어 JDK 가  C:\Program Files\Java\jdk1.6.0_27 요기에 설치되 있다면
-vm 
C:\Program Files\Java\jdk1.6.0_27\bin\javaw.exe
요렇게~~



요방법 말고 다른 방법은 eclipse.exe 바로 가기를 하나 맨들어서(이미 바로가기로 실행하고 있다면 안만들어도 됨)

바로가기 아이콘 위에서 오른쪽 버튼 클릭을 뽓 한다음 속성으로 가서 바로가기탭에 있는 대상란 뒤쪽에

 -vm "C:\Program Files\Java\jdk1.6.0_27\bin\javaw.exe" 요걸 추가시켜 준다음 이 바로가기를 이용해 실행해도 된다.

폴더명에 공백이 있으면 " <- 이걸로 한번 감싸줘야 한다.


Spring 개발시 개발, 운영환경 프로퍼티 파일 관리하기

개발하면서 틈틈히 앞으로 운영될 운영환경에 배포를 하면서 확인할거 확인해야 하는 경우가 많이 있는것 같다.


하지만 개발을 하다가 운영환경에 배포를 하기 위해서는 운영환경에 맞게 이것저것 수정을 많이 해야 한다.

뭐 요런걸 방지하기 위해서 JAVA 소스에 픽스시켜 놓지 않고 변경될만한 부분을 따로 프로퍼티 파일로 빼내서 관리하는 경우가 많다.

그런데 요 프로퍼티 파일도 결국은 개발이냐 운영이냐에 따라 수정했다가~, 다시 원상복구 했다가~ 해야 한다.

뭐 대표적인 것으로는 디비접속 정보쯤 되겠다~



아무튼 Spring이 메인 프레임워크인 환경에서는 프로퍼티 파일을 아래처럼 구성하면 mode 값을 dev 나 op 로만 바꾸면 싹 적용시킬수 있다.
# mode : dev(개발), op(운영)
mode=dev

jdbc.mysql.driverClassName=com.mysql.jdbc.Driver
jdbc.mysql.xaDriver=com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
jdbc.mysql.url=${jdbc.mysql.${mode}.url}
jdbc.mysql.username=${jdbc.mysql.${mode}.username}
jdbc.mysql.password=${jdbc.mysql.${mode}.password}

jdbc.mysql.dev.url=jdbc:mysql://ip:3306/dbname?useUnicode=true&characterEncoding=utf8
jdbc.mysql.dev.username=아이디
jdbc.mysql.dev.password=비번

jdbc.mysql.op.url=jdbc:mysql://ip:3306/dbname?useUnicode=true&characterEncoding=utf8
jdbc.mysql.op.username=아이디
jdbc.mysql.op.password=비번



요렇게 설정한후 값을 가져오는 부분에서는

만약 스프링 설정 xml파일에서 값을 참조하고 싶다! 그러면
<property name="url" value="${jdbc.mysql.url}"/>
요렇게 참조하고 불러오는 값은 mode 에 설정된 값에 따라 개발모드 프로퍼티값이나 운영모드 프로퍼티 값을 읽어올 것이다.


아니면 Java 클래스에서 @Value 어노테이션을 써서 가져오고 싶다면
@Value("${jdbc.mysql.url}") String url;
요렇게 값을 가져올 수 있다.



요런 사용법을 쪼매 응용하면 다른 부분에서도 효과적으로 프로퍼티를 다룰수 있을것 같다.



Runtime 에 jar 파일 클래스패스에 추가 시키기 : RuntimeJarLoader

자바로 만든 프로그램을 실행시킬때 java -classpath "jar 파일들 목록" "실행할 자바클래스" 요런식으로 프로그램에서 사용하는 jar 파일을

클래스패스에 추가시켜 줘야 된다.


그런데 톰캣같은 WAS 를 보면 WEB-INF\lib 폴더 아래에 있는 jar 파일들을 딱히 클래스패스에 추가시켜 주지 않아도 지가 알아서 클래스 패스에 추가시켜준다.


요런 기능과 비슷한일을 하는 클래스를 맨들어 보았다.
import java.io.File;
import java.io.FileFilter;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

/**
 * 
 * @author stove99.tistory.com
 *
 */
public class RuntimeJarLoader {
	public static void loadJarIndDir(String dir){
		try{
			final URLClassLoader loader = (URLClassLoader)ClassLoader.getSystemClassLoader();
			final Method method = URLClassLoader.class
                                       .getDeclaredMethod("addURL", new Class[]{URL.class});
			method.setAccessible(true);
			
			new File(dir).listFiles(new FileFilter() {
				public boolean accept(File jar) {
					// jar 파일인 경우만 로딩
					if( jar.toString().toLowerCase().contains(".jar") ){
						try{
							// URLClassLoader.addURL(URL url) 메소드 호출
							method.invoke(loader, new Object[]{jar.toURI().toURL()});
							System.out.println(jar.getName()+ " is loaded.");
						}catch(Exception e){
							System.out.println(jar.getName()+ " can't load.");
						}
					}
					return false;
				}
			});
		}catch(Exception e){
			throw new RuntimeException(e);
		}
	}
}

RuntimeJarLoader.java



※ 코드 설명

일단 현재 실행중인 JVM 에 동적으로 jar 파일을 클래스 패스에 추가 시킬려면
요 코드로 시스템의 클래스 로더를 가져와야 한다.
URLClassLoader loader = (URLClassLoader)ClassLoader.getSystemClassLoader();

가져온 현재 JVM 의 클래스 로더를 이용하여 jar 파일을 로딩시켜 주면 되는데

문제는 jar 파일을 로딩시켜주는 일을 하는 메소드( URLClassLoader.addURL(URL url) )가 protected 라는 것이다.

그래서 loader.addURL("jar 파일"); 요런식으로 외부에서 직접 호출이 불가능 하다.



뭔가 이유가 있어서 protected 로 만들어 놨겠지만 나의 목표를 위해서는 꼭 저 addURL 메소드를 호출해야 할 필요가 있다.

아무튼 저 addURL 메소드를 호출하기 위한 방법으로 Java reflection 을 이용했다.

요코드로 호출할 메소드를 정의하고
Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class});


핵심은 요부분이 되겠다. protected 로 선언된 메소드를 public 이로 바꿔주는 일을 한다. 요렇게 public 으로 바꿔준다음
method.setAccessible(true);


요런 Java reflection 코드를 이용해서 addURL() 을 호출해 주면, 바라던 Runtime 에 jar 파일을 클래스 패스에 추가시킬수 있다.
method.invoke(loader, new Object[]{jar.toURI().toURL()});



※ 참고 RuntimeJarLoader 사용법
// c:\lib 폴더 아래에 있는 jar 파일들 로딩
RuntimeJarLoader.loadJarInDir("c:/lib");

// 현재 실행중인 경로의 하위에 있는 lib 폴더 로딩
RuntimeJarLoader.loadJarInDir("./lib");

요렇게 쓰면 된다~
prev 1 ··· 29 30 31 32 33 34 35 ··· 45 next