• 在jboss中部署可执行jar, deploy executable jar in jboss


        首先,题目是个伪命题, jboss容器是不支持直接部署可执行jar包的,jar只会被加载当作lib对待。这里提供了一个小的变通方案。

        今天我遇到个问题,把我们的项目中的监控模块独立成一个小项目部署,监控逻辑比较简单,这个小项目的实现只依赖了常用的一些jar包和spring jdbcTemplate.

    所以我一直不想把部署搞的太复杂,直接写main()入口部署jar是最理想的。 但如上,jboss不支持。

        只能改造成web项目打war包,在纠结用哪个框架实现servet 监听及启动入口时, 灵机一动,为何不自己写一个servletlistener.

        下面开始:把项目改成web结构不必多说, 之后开始实现一个servlet listener, 很简单,只要继承ServletContextListener就像, 然后把启动代码贴到contextInitialized里面。

    public class StartMonitor implements ServletContextListener{
    @Override
    public void contextInitialized(ServletContextEvent sce) {
    //这里写原来executable jar的main方法逻辑
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
    }

          在web.xml中配置上listener., 一切搞定。 打成war包就可运行了

    <web-app>

    <listener>
        <listener-class>
              ${pakagePath}.StartMonitor
         </listener-class>
    </listener>

    </web-app>

        

         回头看,其实这个解决方案很平常, 只是由于我对servlet容器的运行原理一知半解,总是觉得运行一个web必须离不开spring Listener那种类似的东西,要引入许多组件等等。 但实质上,servlet本身非常简洁? 只是提供了一系列标准接口供第三方扩展(比如listener),任何人都可以随意按需实现这些接口。

    更进一步,在web中常用的组件struts2, spring,spring mvc只不过是高手们根据经验对servlet标准接口的一个实现而已?

         因为新手一开始接触就是各种框架啥的,反而容易忽略其最基本的原理。谨此提醒!

  • 相关阅读:
    Linux的常用用法
    docker入门实践01
    airflow安装rest api插件发现airflow webserver服务不能启动的解决办法
    27.Spark中transformation的介绍
    1.Cloudera Manager安装
    win10系统不能ping通vmware虚假机解决办法
    在airflow的BashOperator中执行docker容器中的脚本容易忽略的问题
    AirFlow后台运行调度程序
    Airflow怎么删除系统自带的DAG任务
    airflow删除dag不在页面显示
  • 原文地址:https://www.cnblogs.com/surprizeFuture/p/deployJar.html
Copyright © 2020-2023  润新知