2009-11-24 3 views
11

Tomcat 웹 앱에 영구 파일을 어디에 저장해야합니까?/tomcat으로 영구 데이터를 저장하는 방법/방법은?

  • javax.servlet.context.tempdir 앱이 재배치 될 때이
  • 예컨대에서 절대 경로를 사용하지 마십시오 제거/삭제 것, 가능하지 서블릿의 초기화는 질문의 제목을 응답 옵션
+2

나는 데이터베이스를 사용하고 싶지 않니? – Suppressingfire

+2

Youll은 데이터베이스가 옵션이 아닌 이유에 대해 설명해야합니다. 기본 적이기 때문에 공통점이 있습니다. 어쩌면 우리가 알아야 할 특수하게 제한된 환경에 있습니다. – Karl

+2

아니기 때문에 옵션이 아닙니다. 이러한 대용량 파일을 데이터베이스에 대해 전혀 모르는 레거시 외부 도구로 처리해야하는 방법을 설명하고 데이터베이스를 데이터베이스에 표시하면 즉시 사용할 수 있습니다. 뿐만 아니라 그것에 더 많은 것이 있지만, 단지 내 말을 받아들이십시오 :-) - – nos

답변

9

우리 팀이 많은 작업을 수행합니다. 우리가 따라야 할 일반적인 규칙은 웹 앱 외부와 Tomcat 외부입니다.

우리 sysadmin은 tomcat 사용자에게 rw 권한이있는 서버의 디렉토리 (예 : /var/tomcat/persist)를 설정합니다. 우리는 Tomcat이 파일 저장, 응용 프로그램 특정 초기화 파일 읽기 등을 위해 디렉토리 구조를 구축했습니다.

서블릿의 init-params에서 절대 경로를 사용하지 않으려면 다음을 고려하십시오. tomcat이 시작될 때 시스템 특성을 설정합니다. 그것에 대해 좋은 점은 Tomcat에서 실행되는 모든 응용 프로그램이 해당 응용 프로그램에 액세스 할 수 있다는 것입니다. 그것에 대해 나쁜 점은 Tomcat에서 실행되는 모든 응용 프로그램이 해당 응용 프로그램에 액세스 할 수 있다는 것입니다. base.persist.dir이라는 속성을 설정하고 그 아래의 각 응용 프로그램에 대한 하위 디렉터리를 빌드 할 수 있습니다. setenv.sh 스크립트의 시스템 등록 정보는 bin/ 디렉토리의 CATALINA_OPTS 환경 변수에 설정되어 있습니다.

5

데이터베이스에 파일을 저장

  • 되지 않는 매개 변수, 무엇을하는 DataSource 및 JDNI를 데이터베이스를 사용하는 방법에 대해? 웹 전용 컨텍스트에서도 동시성, 스레딩, 보안, 클러스터링, 이식성 문제로 인해 java.io을 사용하여 파일에 쓰는 것은 실제로 권장되지 않습니다. 이러한 문제 중 일부는 "해결 방법"이 될 수 있지만 여전히 최상의 방법은 아닙니다. 표준 접근법은 데이터베이스를 사용하는 것이며,이 옵션을 다시 고려하여 HSQLBD 나 JavaDB와 같은 "파일 기반"경량 데이터베이스를 혼합하여 던집니다.

    (편집 : 알 수없는 이유로 들어, 데이터베이스가 옵션이 아닌 절대 경로 전달하는 JNDI 또는 컨텍스트 매개 변수 또는 초기화 매개 변수를 사용하여 - 덜 나쁜 옵션 이럴이다 - 너무 제외되는 상대를 들어.. 경로라면 어쩌면 user.home 또는 user.dir을 보거나 커맨드 라인에서 전달할 수있는 다른 시스템 속성이 좋을 것입니다. 나는 그것을 좋아하지 않으며 이전에 언급 한 문제를 해결하지 못합니다. 결국 그것은 선택 사항입니다.)

  • +0

    Claridfied. 데이터베이스는 옵션이 아닙니다. – nos

    0

    일반적으로 데이터베이스를 사용하여 영구 데이터를 저장하고 DataSource를 통해 노출하는 것이 좋습니다.

    이렇게하고 싶지 않은 경우, "user.home"시스템 속성 (몇 가지 상황에서 사용되는 것을 본 적이 있습니다) 사용을 고려해보십시오. 그러나 ... 직접 구성하지 않으면 액세스를 작성하기 위해 서블릿을 실행할 권한이 없습니다.

    4

    Tomcat을 실행하는 사용자의 홈 디렉토리 아래에있는 webapp 디렉토리에 파일을 저장하는 것이 좋습니다. Tomcat 외부에서는 재배포가 지속되는 것을 의미하며 일반적으로 쓰기 가능한 디렉토리입니다 (사용자의 집 디렉토리에서 작성되기 때문에). 그러나 항상 시스템 속성을 통해 해당 디렉토리의 위치를 ​​무시하는 것이 좋습니다.

    1

    일반적으로 이것은 데이터베이스로 이동합니다.알려진

    • 파일 시스템 경로 : ${user.home}/.myapp 영업 데이터베이스를 사용하지 않는 고집 때문에, 나는 다른 방법을 시도 할 것입니다. 예를 들어, 응용 프로그램에서 때때로이를 사용합니다. 검색 인덱스는 데이터베이스의 데이터를 기반으로 다시 계산할 수 있습니다. 사용 사례로 사용자의 집을 사용하는 것이 좋습니다.
    • 구성 가능한 파일 시스템 경로를 데이터베이스 (예 : Java 환경 설정)와 같은 구성 저장소에 저장하십시오 (서블릿 초기화 매개 변수를 사용하지 않으려는 경우). Atlassian JIRA와 같은 상용 응용 프로그램은 문제 첨부 파일을 저장하는 구성 가능한 (그러나 절대적인) 파일 시스템 경로를 사용합니다. 그들이 더 나은 방법을 모르는 경우, 나는 누구인지 모르겠다 :)
    +0

    적어도 우분투에서 tomcat7에 $ {user.home}에 쓰면 권한 때문에 IOException이 발생합니다. – Jonathan

    관련 문제