Java 웹 애플리케이션 (WAR)에서 구성 파일을 저장하는 가장 좋은 위치는 무엇입니까?
웹 애플리케이션 (WAR)을 만들고 Tomcat에 배포합니다. 에서 웹 애플리케이션 관리자가 일부 구성 데이터를 입력 할 수있는 양식이있는 페이지가있다. 이 데이터를 DBMS에 저장하지 않고 파일 시스템의 XML 파일에 저장하고 싶습니다. 어디에 넣을까요?
애플리케이션 자체가 배포되는 디렉토리 트리 어딘가에 파일을 저장하고 싶습니다. 내 구성 파일이 WEB-INF 디렉토리 에 있어야합니까 ? 아니면 다른 곳에 두시겠습니까?
그리고 디렉토리의 절대 경로를 찾기 위해 서블릿에서 사용할 Java 코드는 무엇입니까? 아니면 상대 경로로 액세스 할 수 있습니까?
우리가하는 일은 서버의 별도 디렉토리에 저장하는 것입니다 (/ config, / opt / config, / root / config, / home / username / config 또는 원하는 모든 것을 사용할 수 있음). 서블릿이 시작되면 XML 파일을 읽고 몇 가지 (가장 중요한 것은 DB 연결 정보)를 가져옵니다.
나는 우리가 이것을 한 이유에 대해 물었다.
모든 것을 DB에 저장하는 것이 좋지만 당연히 DB 연결 정보를 DB에 저장할 수는 없습니다.
코드에서 하드 코딩 할 수는 있지만 여러 가지 이유로 추악합니다. 정보를 변경해야하는 경우 코드를 다시 빌드하고 다시 배포해야합니다. 누군가가 귀하의 코드 또는 WAR 파일의 사본을 받으면 해당 정보를 얻게됩니다.
WAR 파일에 항목을 넣는 것은 좋은 것처럼 보이지만 많이 변경하려면 나쁜 생각 일 수 있습니다. 문제는 정보를 변경해야하는 경우 다음 번에 재배포 할 때 파일을 덮어 써서 WAR에 빌드되는 버전에서 변경 한 것을 기억하지 못했던 것은 잊어 버린다는 것입니다.
파일 시스템의 특별한 위치에있는 파일은 우리에게 아주 잘 작동합니다. 큰 단점이 없습니다. 그것이 어디에 있는지 알고 있고, 별도로 저장되며, 모두 다른 구성 값이 필요한 경우 여러 컴퓨터에 쉽게 배포 할 수 있습니다 (WAR의 일부가 아니기 때문에).
잘 작동 할 것이라고 생각할 수있는 유일한 다른 솔루션은 DB 로그인 정보를 제외한 모든 것을 DB에 보관하는 것입니다. 이는 JVM을 통해 검색되는 Java 시스템 속성에서 비롯됩니다. 이것은 위에서 Hans Doggen이 언급 한 Preferences API입니다. 사용하지 않았다면 응용 프로그램이 처음 개발되었을 때 주변에 있다고 생각하지 않습니다.
구성 파일에 액세스하기위한 경로는 파일 시스템의 파일 일뿐입니다. 웹 경로에 대해 걱정할 필요가 없습니다. 따라서 서블릿이 시작될 때 "/config/myapp/config.xml"(또는 기타)에서 파일을 열고 올바른 것을 찾습니다. 이 경로를 하드 코딩하는 것만으로도 나에게는 무해한 것 같습니다.
WEB-INF는 구성 파일을 저장하기에 좋은 장소입니다. 다음은 서블릿에서 디렉토리의 절대 경로를 가져 오는 코드입니다.
public void init(ServletConfig servletConfig) throws ServletException{
super.init(servletConfig);
String path = servletConfig.getServletContext().getRealPath("/WEB-INF")
이 WEB-INF
파일을 넣으면 URL을 통해 직접 액세스하려는 사용자로부터 XML 파일이 숨겨 지므로 예, WEB-INF
.
응용 프로그램의 새 배포로 구성을 재정의하므로 응용 프로그램 폴더에 저장하지 않습니다.
Preferences API를 보거나 users 폴더 (Tomcat을 실행하는 사용자)에 무언가를 작성하는 것이 좋습니다.
이에 대한 대답은 해당 구성 파일을 읽고 쓰는 방법에 따라 다릅니다.
예를 들어 Spring 프레임 워크는 XML 구성 파일 (또는 Java 속성 파일) 을 사용할 수있는 기능을 제공합니다 . 이들은 클래스 경로 (예 : WEB-INF 디렉토리), 파일 시스템의 다른 위치 또는 메모리에 저장할 수 있습니다. 이를 위해 Spring을 사용했다면 구성 파일을 저장하는 가장 쉬운 위치는 WEB-INF 디렉토리에 있으며 Spring의 ClassPathXmlApplicationContext 클래스를 사용하여 구성 파일에 액세스하십시오.
그러나 다시 말하지만 모든 것은 해당 파일에 액세스 할 계획에 따라 다릅니다.
사용자 정의 구성이라면 WEB-INF가 좋은 장소입니다. 그러나 일부 라이브러리는 구성이 WEB-INF / 클래스에 상주해야 할 수 있습니다.
'programing tip' 카테고리의 다른 글
Angularjs ui-router. (0) | 2021.01.08 |
---|---|
메모리를 확보하는 좋은 방법입니까? (0) | 2021.01.08 |
Django ModelChoiceField : 쿼리 세트 필터링 및 기본값을 객체로 설정 (0) | 2021.01.07 |
Java if vs. try / catch 오버 헤드 (0) | 2021.01.07 |
변수의 독 스트링 (0) | 2021.01.07 |