1. 스프링 시간 정상 작업은 두 번 실행됩니다
문제 재생 및 분석
최근에 나는 석영 타이밍 작업 프레임 워크를 사용했으며 개발 환경 실행에 아무런 문제가 없음을 발견했습니다. 서버에 배포 한 후 작업이 동시에 여러 번 실행된다는 것을 알았습니다. 검색 후 서버의 Tomcat 구성 파일에 문제가 있음을 알았습니다.
원래 구성 파일 -Server.xml은 다음과 같습니다.
<호스트 이름 = "localhost"appbase = "webapps"unpackwars = "true"autodeploy = "true"> <valve classname = "org.apache.catalina.valves.accesslogvalve"directory = "logs"prefix = "localhost_access_log"suffix = "txt"패턴 = "txt" /> </host> <host name = "www.xxx.com"appbase = "webapps"unpackwars = "true"autodeploy = "true"xmlvalidation = "false"xmlnamespaceaware = "false"> <context path = "docbase ="/usr/local/tomcat/apache-tomcat -8.9/webapps/xxxindec. Reloadable = "true"> </context> </host>
호스트는 여러 컨텍스트 (응용 프로그램)를 포함 할 수있는 컨테이너를 나타냅니다. 위의 구성 파일은 다음을 의미합니다. 두 개의 컨테이너는 Tomcat, 하나의 이름 = localhost, 응용 프로그램의 루트 디렉토리는 WebApps이며 전쟁 패키지는 자동으로 압축 해제되어 자동으로 배포됩니다. 컨텍스트가 지정되지 않으면 루트 디렉토리의 모든 웹 응용 프로그램이 배포됩니다. 배포가 성공하면 서버 IP + 프로젝트 이름을 통해 외부 네트워크에 액세스 할 수 있습니다. 첫 번째 호스트와 다른 다른 이름 = www.xxx.com은 홈페이지 웹 응용 프로그램으로 구성되며 프로젝트 이름으로 액세스 할 필요가 없습니다. 배포가 성공하면 도메인 이름 + 프로젝트 이름을 통해 액세스 할 수 있으며 홈페이지가 위치한 프로젝트에 루트 도메인 이름을 통해 직접 액세스 할 수 있습니다.
현재 문제가 발생합니다. 타이밍 작업이 포함 된 프로젝트는 WebApps 디렉토리에 배포됩니다. Tomcat의 두 개의 독립 컨테이너가 한 번 배포되며, 이는 프로젝트가 서버의 Tomcat에 두 번 배포되는 것과 같습니다. 양측은 동시에 타이밍 작업을 실행하며 동일한 데이터베이스가 지정됩니다.
문제 해결
따라서 가능한 한 다른 프로젝트의 정상 액세스에 영향을 미치지 않기 위해 타이밍 작업을 수행 해야하는 프로젝트가 Webroot와 같은 다른 폴더에 별도로 배포 된 다음 도메인 이름 호스트 만 사용한다고 말했습니다. 구성 파일이 수정 된 후 다음은 다음과 같습니다.
<호스트 이름 = "localhost"appbase = "webapps"unpackwars = "true"autodeploy = "true"> <valve classname = "org.apache.catalina.valves.accesslogvalve"directory = "logs"prefix = "localhost_access_log"suffix = "txt"패턴 = "txt" /> </host> <host name = "www.xxx.com"appbase = ""unpackwars = "true"autodeploy = "true"xmlvalidation = "false"xmlnamespaceaware = "false"> <context path = "docbase ="/usr/local/tomcat/apache-tomcat-8.5.9/webApps/xxodex " Reloadable = "true"> </context> <context path = "/projecta"docbase = "/usr/local/tomcat/apache-tomcat-8.5.9/webapps/projecta"Reloadable = "true"> </context> <context path = "/projectb"docbase = "/usr/local/tomcat/tomcat-tomcat-8.9.9/webapps/9.9/webapps" Reloadable = "true"> </context> <context path = "/projectc"docbase = "/usr/local/tomcat/apache-tomcat-8.5.9/webroot/projectc"Reloadable = "true"> </context> </host>
ProjectC는 타이밍 작업이 포함 된 프로젝트임을 알 수 있습니다. 도메인 이름을 통해서만 액세스 할 수있는 프로젝트를 제외하고 성공적인 배포 후, 다른 프로젝트의 액세스 방법은 이전과 변경되지 않았습니다. 동시에 문제가 해결되고 타이밍 작업은 한 번만 실행됩니다.
온라인으로 또 다른 말
<호스트 이름 = "localhost"appbase = "webapps"unpackwars = "true"autodeploy = "true"> <context docbase = "projecta"path = ""Reloadable = "true" /< /host>
호스트는 하나뿐입니다. Tomcat이 시작되면 루트 디렉토리의 모든 프로젝트가 한 번 배포 된 다음 컨텍스트가 다시 배포되므로 타이밍 작업이 두 번 실행됩니다.
이 문제에 대한 많은 해결책이 있습니다.
2. 느린 Tomcat 배포 문제
내가 사용한 Alibaba Cloud 서버는 Tomcat을 배포 할 때 매우 느 렸지만 나중에 구입 한 새로운 Alibaba Cloud에는이 문제가 없었습니다. 프로젝트가 배치 된 후에는 그렇습니다
정보 [LocalHost-StartStop-1] org.apache.catalina.startup.hostconfig.deployDirectory 배포 웹 애플리케이션 디렉토리 /opt/apache-tomcat-8.0.15-servapps/root
여기서 계속하는 데 몇 분이 걸립니다. 나는 그것이 서버 구성 이유라고 생각했지만 나중에 실수로 JRE 구성 이유라는 것을 발견했습니다. 여러 블로그를 언급 한 후 Oracle은 Weblogic의 문서에 따라 이유와 솔루션을 제공한다는 것을 알았습니다.
Sun의 JVM에서 임의의 숫자 생성에 사용되는 라이브러리는 UNIX 플랫폼의 경우 /dev /random에 의존합니다. 이는 일부 운영 체제 /dev /random에서 결과를 반환하기 전에 호스트 시스템에서 일정량의 "노이즈"가 생성되기 때문에 Weblogic SIP 서버 프로세스를 차단할 수 있습니다. /dev /random은 더 안전하지만 BEA는 기본 JVM 구성이 Weblogic SIP 서버 시작을 지연시키는 경우 /dev /urandom을 사용하는 것이 좋습니다.
의미:
수정 방법 :
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.