在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服务器配置

在wlp\usr\servers\defaultServer路径下,找到Liberty启动服务器配置server.xml,添加host="*",指定拦截任何请求,否则应用服务器不会拦截你的请求:


启动服务器验证

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

liberty | 在IDEA整合Springboot与IBM liberty的更多相关文章

  1. 用Springboot干掉IBM的WAS-为公司省点钱

    1 那一夜,你伤害了我 今夜的雨下得凉快,小南睡得正香,突然收到远洋运维小周的电话:Hello, Are you OK? WAS有issue,快起来help me! 只见小南登陆WAS机,查看了机器日 ...

  2. 整合springboot(app后台框架搭建四)

    springboot可以说是为了适用SOA服务出现,一方面,极大的简便了配置,加速了开发速度:第二方面,也是一个嵌入式的web服务,通过jar包运行就是一个web服务: 还有提供了很多metric,i ...

  3. 整合 springboot 和 swagger出问题

    整合 springboot 和 swagger ,出现报错, org.springframework.beans.factory.UnsatisfiedDependencyException: Err ...

  4. 【SpringBoot】搜索框架ElasticSearch介绍和整合SpringBoot

    ========================12章 搜索框架ElasticSearch介绍和整合SpringBoot ============================= 加入小D课堂技术交 ...

  5. netty-socketio整合springboot消息推送

    netty-socketio整合springboot消息推送 1.netty-socketio消息推送 1)在项目中常常涉及到消息推送的情况,消息推送要求的实时性,使用传统的方式已经不能满足需求了: ...

  6. 教你 Shiro 整合 SpringBoot,避开各种坑

    教你 Shiro 整合 SpringBoot,避开各种坑-----https://www.cnblogs.com/HowieYuan/p/9259638.html

  7. 基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis

    SpringBoot 整合 Mybatis 有两种常用的方式,一种就是我们常见的 xml 的方式 ,还有一种是全注解的方式.我觉得这两者没有谁比谁好,在 SQL 语句不太长的情况下,我觉得全注解的方式 ...

  8. 消息中间件——RabbitMQ(十)RabbitMQ整合SpringBoot实战!(全)

    前言 1. SpringBoot整合配置详解 publisher-confirms,实现一个监听器用于监听Broker端给我们返回的确认请求:RabbitTemplate.ConfirmCallbac ...

  9. Activiti7整合SpringBoot(十二)

    1 SpringBoot 整合 Activiti7 的配置 为了能够实现 SpringBoot 与 Activiti7 整合开发,首先我们要引入相关的依赖支持.所以,我们在工程的 pom.xml 文件 ...

随机推荐

  1. 简易数据分析 15 | Web Scraper 高级用法——CSS 选择器的使用

    这是简易数据分析系列的第 15 篇文章. 年末事情比较忙,很久不更新了,后台一直有读者催更,我看了一些读者给我的私信,发现一些通用的问题,所以单独写篇文章,介绍一些 Web Scraper 的进阶用法 ...

  2. mysql中information_schema.columns字段说明

    1. 获取所有列信息(COLUMNS) SELECT  *  FROM information_schema.COLUMNS WHERE  TABLE_SCHEMA='数据库名';  COLUMNS表 ...

  3. 异常 A component named TableViewForm already exists 解决方法

    用navicate连接mysql,打开数据库表格,出现 A component named TableViewForm already exists  异常信息,如下图: 1.异常原因: 打开的表格数 ...

  4. 利用Feed43为网站自制RSS源

    什么是RSS,它可以做什么 快2020年了,RSS日渐式微,我也是去年机缘巧合下才开始使用的,以前只是听说过.RSS,全称Really Simple Syndication,又称简易信息聚合(也叫聚合 ...

  5. TensorFlow之tf.less()

    函数:tf.less less( x, y, name=None ) 以元素方式返回(x <y)的真值. 注意:Less支持广播. 参数: x:张量.必须是下列类型之一:float32,floa ...

  6. 菜鸟学习Fabric源码学习 — Endorser背书节点

    Fabric 1.4 源码分析 Endorser背书节点 本文档主要介绍fabric背书节点的主要功能及其实现. 1. 简介 Endorser节点是peer节点所扮演的一种角色,在peer启动时会创建 ...

  7. NSOperationQueue队列依赖相关思考

    添加依赖后,队列中网络请求任务有依赖关系时,任务结束判定以数据返回为准还是以发起请求为准? waitUntilFinished方法容易误解. 依赖关系 // // ViewController.m / ...

  8. redis 为什么是单线程,为什么速度快。

    redis 5中存储方式 String.List.Set.Hash.ZSet这5种 数据库的工作模式按存储方式可分为: 硬盘数据库和内存数据库.Redis 将数据储存在内存里面,读写数据的时候都不会受 ...

  9. Hexo + Serverless Framework,简单三步搭建你的个人博客

    很多人都想拥有自己的个人博客,还得看起来漂亮.酷酷的.尤其对开发者来说,不仅可以分享技术(装)心得(逼),面试的时候还能成为加分.这里介绍两款好用的神器,不用忙前(前端)忙后(后端),简单3min即可 ...

  10. 为什么样本方差的分母是n-1?为什么它又叫做无偏估计?

    为什么样本方差的分母是n-1?最简单的原因,是因为因为均值已经用了n个数的平均来做估计在求方差时,只有(n-1)个数和均值信息是不相关的.而你的第n个数已经可以由前(n-1)个数和均值 来唯一确定,实 ...