본문으로 바로가기

실제 운영서버에 서버 리소스를 아끼기 위해

하나의 tomcat 서버에 포트를 다르게해서

애플리케이션을 2개 이상으로 띄울수가 있다.

이 방법은 톰켓 파일중 server.xml만 수정하면 간단히 기동가능 한데.


<!--?xml version="1.0" encoding="UTF-8"?-->

  <server port="8005" shutdown="SHUTDOWN">
  <listener classname="org.apache.catalina.startup.VersionLoggerListener"/>
  
  <listener sslengine="on" classname="org.apache.catalina.core.AprLifecycleListener"/>
  <listener classname="org.apache.catalina.core.JasperListener"/>
  <listener classname="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
  <listener classname="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <listener classname="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>

  <globalnamingresources>
    <resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase">
  </resource></globalnamingresources>

  <service name="service1">
    <connector connectiontimeout="20000" port="8080" protocol="HTTP/1.1" redirectport="8443"/>
    <connector port="8009" protocol="AJP/1.3" redirectport="8443"/>
    <engine defaulthost="localhost" name="service1">
      <host appbase="서버 1 소스 경로 : (context를 지정하지않으면 ROOT 폴더가 있어야함)" autodeploy="true" name="localhost" unpackwars="true">
      	 <context docbase="서버 1 프로젝트 디렉토리" path="" reloadable="true">
      </context></host>
    </engine></service>
  
   <service name="service2">
    <connector connectiontimeout="20000" port="18080" protocol="HTTP/1.1" redirectport="18443" />
    <connector port="18009" protocol="AJP/1.3" redirectport="18443" />
    <engine defaulthost="localhost" name="service2">
      <host appbase="서버 2 소스 경로 : (context를 지정하지않으면 ROOT 폴더가 있어야함)" autodeploy="true" name="localhost" unpackwars="true">
      	 <context docbase="서버 2 프로젝트 디렉토리" path="" reloadable="true">
      </context></host>
    </engine></service>
</server>


위처럼 수정해주면 간단히 설정가능하다.

주의할점을 실제 이클립스에서도 위처럼 설정하면 설정가능한데

다른 애플리케이션을 포트를 다르게 해서 위처럼 올린다면
Host appBase= 경로는 꼭 다른 경로여야 한다.
스캐닝중 하나의 context만 올라가서 이중으로 올긴 context가 무시되는 현상이 발생했다.

또한 service name과 engine name을 동일하게 해줘야 한다.

이부분만 주의한다면 서비스 2개 기동하는데 문제가 없을것 같다.