Jetty啟動服務

使用Jetty啟動服務

public class ApiServer {
public static void main(String[] args) {
        final ApiServer apiServer = new ApiServer();
        try {
            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
            java.security.Security.setProperty("networkaddress.cache.ttl" , "10");

            ServiceConfig config = ServiceConfig.getInstance();
            boolean result = config.init(confFile);
            if (!result) {
                LOGGER.error("failed to init ServerConfig, exiting...");
                System.exit(EXIT_CODE);
            }

            boolean initServiceSuccess = apiServer.initService(serverConfig);
            if (!initServiceSuccess) {
                System.exit(EXIT_CODE);
            }

            Runtime.getRuntime().addShutdownHook(new Thread() {
                @Override
                public void run() {
                    apiServer.stopServer();
                }
            });

            apiServer.startServer(config);

        } catch (Exception e) {
            LOGGER.error("message api error,", e);
        }
    }

    private boolean initService(MessageConfig serverConfig) {
        // TODO, init depend service, MySQL, Kafka, Redis, Zookeeper
        return ture;
    }

    private void startServer(ServiceConfig serverConfig) throws Exception {
        ResourceConfig config = new ResourceConfig();
        config.packages(ApiServer.class.getPackage().getName());
        config.register(BasicFilter.class);
        config.register(LoggingFilter.class);
        config.register(CharsetResponseFilter.class);
        ServletHolder servlet = new ServletHolder(new ServletContainer(config));

        server = new Server(HTTP_PORT);
        ServletContextHandler context = new ServletContextHandler(server, "/*");
        context.addServlet(servlet, "/*");

        //gracefully shutdown jetty config
        server.setStopAtShutdown(true);
        server.setStopTimeout(3000L);//3 second

        try {
            server.start();
            LOGGER.info("api server started, port {}", HTTP_PORT);
            server.join();
        } finally {
            if (!server.isStopped()) {
                server.destroy();
            }
        }
    }

    private void stopServer() {
        try {
            LOGGER.info("close api server...");
            server.stop();
        } catch (Exception e) {
            LOGGER.error("close api server error", e);
        }
        // TODO, stop service which depend
    }

}

ResourceConfig config = new ResourceConfig();
config.packages(ApiServer.class.getPackage().getName());
config.register(BasicFilter.class);
config.register(LoggingFilter.class);
config.register(CharsetResponseFilter.class);
ServletHolder servlet = new ServletHolder(new ServletContainer(config));

server = new Server(HTTP_PORT);
ServletContextHandler context = new ServletContextHandler(server, "/*");
context.addServlet(servlet, "/*");

server.setStopAtShutdown(true);
server.setStopTimeout(3000L);//3 second
server.start();
server.join();

通過register函數(shù)注冊Filter類,在Filter類中會重寫filter函數(shù)處理請求或響應。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容