[Tomcat] xml 변경 시 톰캣을 재기동하는 이유 + 재기동 없이 적용하는 방법

    📌 잘못된 정보라면 댓글로 남겨주세요 :) 

     

    xml 변경 시 톰캣을 재기동하는 이유

     

    톰캣 구동되면 WEB-INF/web.xml 파일이 가장 먼저 읽히고, web.xml에 따라 bean 객체가 생성됩니다.
    즉, 서버 스타트와 동시에 SqlSessionFactory 객체가 생기며, 이에 따라 생성되는 sqlSession 객체에 의해 SQL 실행, 트랜잭션 처리등을 할 수 있습니다.


    Spring에서의 Bean은 Singletone으로 관리되기 때문에, xml 변경 시에 Tomcat이 재기동 되어야 합니다.

     

    서버 재기동 없이 적용할 수 있는 방법

    RefreshableSqlSessionFactoryBean 클래스는 SqlSessionFactoryBean 클래스를 상속 받아 생성되며, refresh()마다 부모 클래스의 afterPropertiesSet() 호출하며, 해당 메소드에서 buildSqlSessionFactory() 호출하여 sqlSessionFactory를 변경하는 로직입니다. 개발 환경에서 테스트 하였고,서버 재기동 없이 수정된 xml로 정상적으로 반영되는 점을 확인할 수 있었습니다. 전자정부 프레임워크에서 제공한 참고 URL 링크를 공유합니다. (http://bryan7.tistory.com/117)

     

    (출처: https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000016866)

     

    적용방법

    1.  sqlSessionFactory 생성 구문 수정

    경로 : WEB-INF\classes\config\spring\

    AS-IS TO-BE
     <bean  id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="jdbc/경로"  />
        <property name="configLocation" value="classpath:config/mybatis/sqlMapConfig.xml" />
        <property name="mapperLocations"  value="classpath:sql/**/*.xml"  />
      </bean>
     <bean id="sqlSessionFactory"  class="경로.RefreshableSqlSessionFactoryBean">
          <property name="dataSource" ref="jdbc/경로"  />
          <property name="configLocation" value="classpath:config/mybatis/sqlMapConfig.xml" />
          <property name="mapperLocations"  value="classpath:sql/**/*.xml"  />
        </bean>

     

    2. RefreshableSqlSessionFactoryBean.class 추가

    경로 : WEB-INF\classes\경로

    (** 원하는 경로가 있다면 해당 경로에 파일을 추가하시면 됩니다. 이 경우, applicationContext.xml 의 경로도 변경해주세요.)

    3. 정상 적용시 Tomat log에 아래 화면 출력됨


     

    💡 실제로 테스트하며 사용했는데 너무너무 편했다. 테스트 환경에서는 사용해도 좋을 것 같다.

    운영 환경에서는 보장하지 못합니다 ^.ㅠ...

     

     

    728x90

    댓글