在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);}@Overrideprotected 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. 使用Gradle整合SpringBoot+Vue.js-开发调试与打包

    为什么80%的码农都做不了架构师?>>>    非常感谢两位作者: kevinz分享的文章<springboot+gradle+vue+webpack 组合使用> 首席卖 ...

  2. 微信公众号授权步骤详细步骤介绍和整合springboot开发(java版)

    文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源. 一.微信公众号授权步骤 首先到微信公众平台注册账号,可以看到有四种类型(服务号,订阅号,小程 ...

  3. spring日志报错提醒_使用爬虫框架htmlunit整合springboot出现的一个不兼容问题

    使用爬虫框架htmlunit整合springboot不兼容的一个问题 本来使用htmlunit爬虫爬取数据非常正常好用,之前一直是直接java程序或者整合Javaswing界面,都没有问题,但是后来整 ...

  4. java kafka client_Kafka Java Client基本使用及整合SpringBoot

    kafka-clients 添加依赖 org.apache.kafka kafka-clients 2.5.0 消费者 Consumer 代码上总体可以分为三部分:消费者的配置消费者的配置在 org. ...

  5. [RabbitMQ]整合SpringBoot

    整合SpringBoot 创建项目 引入依赖 <dependencies><!--RabbitMQ 依赖--><dependency><groupId> ...

  6. mall整合SpringBoot+MyBatis搭建基本骨架

    本文主要讲解mall整合SpringBoot+MyBatis搭建基本骨架,以商品品牌为例实现基本的CRUD操作及通过PageHelper实现分页查询. mysql数据库环境搭建 下载并安装mysql5 ...

  7. Shiro 整合 SpringBoot

    Shiro 整合 SpringBoot shiro主要有三大功能模块 Subject:主体,一般指用户. SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件.(类 ...

  8. JWT认证原理、整合springboot实战应用

    JWT认证原理.整合springboot实战应用 1.什么是JWT 2.JWT能做什么 3.与传统的session认证做对比 4.JWT结构 5.JWT的封装方法 1.什么是JWT JWT(Json ...

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

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

最新文章

  1. 大二上学期软件工程概论学习进度表(第十二周)
  2. DVWA--Command Injection(命令执行)--四个等级
  3. 华为首款鸿蒙设备正式入网,华为首款鸿蒙设备正式入网:麒麟9000+挖孔全面屏,价格感人!...
  4. 岳阳鸿蒙数学培优阶梯训练,鸿蒙应用-呼吸训练app部分练习展示(开始)
  5. 发布npm包到GitHub Packages
  6. 寒冬袭来,带你使用Flask开发一款天气查询软件吧
  7. 服务器启动将字典加载到内存中@PostConstruct
  8. MFC工作笔记0010---PeekMessage 详解
  9. 【恋上数据结构】基数排序、桶排序、休眠排序
  10. 一文弄懂二叉树三种遍历
  11. SQL2005创建快照
  12. 如何自学python知乎-如何快速学习python?
  13. HDOJ 1671 HDU 1671 Phone List ACM 1671 IN HDU
  14. 视频+课件|基于多视图几何方式的三维重建
  15. python批量下载pdf
  16. Excel如何将英语大写快速转变为小写
  17. Pr入门系列之三:新建序列
  18. pagesize==0异常问题
  19. ThinkPad Win7更改鼠标滚轮设置问题
  20. 前后端分离框架Vue+Element UI(上集)

热门文章

  1. VC++实时检测耳机的插入与拔出(附源码)
  2. 见证奇瑞新QQ 1.0MT十年间的蜕变
  3. 角色移动的步长、步速与滑步现象
  4. 计算机基础知识字节,计算机基础知识:什么是位、字节、字、KB、MB
  5. 分享一些免费调用的API网站,快来看看
  6. Serializable类
  7. Event ID: 7034 1000 解决经过
  8. Windows下安装Rabbit MQ步骤详解
  9. MBIST DFT测试概念
  10. 安装cocopods时失败,更新ruby到2.2.2失败原因