zoukankan      html  css  js  c++  java
  • liberty | 在IDEA整合Springboot与IBM liberty

    在这里插入图片描述

    在IDEA整合Springboot与IBM liberty

    简介

    Liberty 是一款全新的轻量级应用服务器,它将用户的良好开发体验作为最主要的出发点。其主要特点和内容包括:

    • 高模块化——该功能允许用户根据自己应用程序的需求启用或者禁用相关的 feature(所谓 feature,在这里指的是运行应用程序所需要的各种资源的支持。比如,应用程序用到了 JSP,我们就需要启动 JSP 这个 feature,如果不在需要此 feature,就可以将其禁用。通过这种模块化的控制,我们可以按需启动不同的 feature,包括 JSP, Servlet, JPA 等等,这种控制是实现轻量级应用服务器的基础)。

    • 轻量级—— Liberty 采用了多种技术进行瘦身和优化(主要是 OSGi 的应用),与传统的 WAS 相比,极大的减少了运行时的内存消耗。

    • 高动态性——由于采用了 OSGi 的架构,程序员在开发的时候,可以动态修改配置文件,应用程序以及服务器的运行时信息,这些修改都是实时生效的,不需要重启服务器。

    • 快速——由于采用了高模块化的设计,Liberty 应用服务器会“按需启动”,自身消耗的系统资源很少,对执行任务的反应时间也非常短,例如,一般来说 Liberty 的启动时间小于 5 秒。

    • 配置简单——在整个开发过程中,用户只需要和一个配置文件(server.xml)打交道,而且配置的使用也非常灵活。

    尽管 Liberty 与传统 WAS 相比只是一个“小块头”,但是在 Web 和 OSGi 应用程序的开发上,Liberty 与传统 WAS 完全保持一致,在 Liberty 上开发的程序,可以直接移植到传统 WAS 上,不需要做任何的改变。相比传统 WAS 的庞大,Liberty 在为用户提供良好的开发体验上遥遥领先。

    在本文中,我将描述如何使用Spring Boot和IDEA开发工具创建一个简单的“Hello World”应用程序。


    IBM Liberty Vs Tomcat

    简单来说,IBM Liberty就是 IBM WebSphere Application Server 的简化版,Liberty是从WebSphere 8.5.5引入的,与传统的WAS不同,Liberty侧重于云应用与微服务的支持,用户可以配置细粒度级别的应用程序所需的组件,所以服务器启动速度非常快,占用空间也很小,跟tomcat一样轻量级,一般都是用于企业级应用比较多,尤其是金融类、或者大型商业应用等,提供很多商业级的扩展组件。

    两者区别可以通过以下两篇文章了解:
    https://webspherecompetition.files.wordpress.com/2012/11/liberty-vs-tomcat.pdf
    https://www.ibm.com/developerworks/community/files/form/anonymous/api/library/ac092234-1cdc-406a-9317-39ee651ffbf6/document/ed0b79c7-09f1-4023-b7ec-31efa730c97f/media/tomcat-liberty.pdf


    开始之前

    你需要先到以下网址下载最新版的WebSphere Liberty runtime:
    https://developer.ibm.com/wasdev/downloads/download-latest-stable-websphere-liberty-runtime/


    创建Springboot Rest应用

    利用Spring Initializr创建一个Sprignboot项目
    选择File->Project->Spring Initizlizr创建项目命名为liberty-demo,依赖包选择Web,然后一直点击Next完成即可,项目结构如下:
    在这里插入图片描述
    配置Pom.xml文件,添加servlet容器依赖:

         <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    

    如果使用旧版本的应用服务器,还需要添加如下依赖:

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    

    跟配置外置tomcat一样,我们需要过滤到Springboot里的tomcat模块

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    

    我项目完整的Pom.xml文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.eshare.liberty</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>demo</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
        
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    
    

    我们要使用传统的WAR发布Sringboot项目方式,需要调整程序入口代码,继承SpringBootServletInitializer类,重写configure方法去告诉容器我们的程序启动入口

    @SpringBootApplication
    public class DemoApplication extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(DemoApplication.class);
        }
    }
    
    

    接下来我们实现一个简单的Rest程序,用于测试容器是否启动正常

    /**
     * Created by liangyh on 2018/10/20.
     * Email:10856214@163.com
     */
    @RestController
    public class IndexController{
    
            @RequestMapping("/sayHello/{name}")
            public String sayHello(@PathVariable String name) {
                return "hello," + name;
            }
    
    }
    

    记住,Springboot的启动类必须置于其他类的同级或者外层,否则会出现扫描不到类的情况,完成项目结构如下:
    在这里插入图片描述


    配置Liberty应用服务器

    设置我们的模块包的打包方式
    点击Peroject Structure->Artifacts,如下图所示选择打包方式:
    在这里插入图片描述
    选择完成后,点击Apply完成

    选择启动应用服务器
    如下图所示,选择liberty作为我们的项目服务器,然后填入相应配置,必须配置请求上下文(如/demo/):
    在这里插入图片描述
    在这里插入图片描述
    设置Liberty服务器配置
    在wlpusrserversdefaultServer路径下,找到Liberty启动服务器配置server.xml,添加host="*",指定拦截任何请求,否则应用服务器不会拦截你的请求:
    在这里插入图片描述


    启动服务器验证

    在IDEA启动服务器,浏览器输入http://localhost:9080/demo/sayHello/haha,可以看到如下结果:
    在这里插入图片描述

  • 相关阅读:
    linux基础_第一篇_IT运维介绍
    Java实现文件分割和文件合并实例
    dotweb——go语言的一个微型web框架(三)路由注册
    dotweb——go语言的一个微型web框架(二)启动dotweb
    dotweb——go语言的一个微型web框架(一)
    Linq的查询操作符
    dsfgdfg
    .NET Entity Framework (with Oracle ODP.NET) -Code First
    .NET Entity Framework (with Oracle ODP.NET)
    ODP.NET 之 ExecuteNoQuery 执行 Merge into 返回值
  • 原文地址:https://www.cnblogs.com/evan-liang/p/12233915.html
Copyright © 2011-2022 走看看