liberty | 在IDEA整合Springboot與IBM liberty
在IDEA整合Springboot與IBM liberty
簡介
WebSphere Liberty是一個快速,動態且易於使用的Java應用程式伺服器,構建於開源Open Liberty專案之上。適用於開發人員,也適用於生產,內部部署或雲端產品 Liberty是IBM技術和開源軟體的組合,具有快速啟動時間(<2秒),無需重啟伺服器以獲取更改,以及簡單的XML組態。
在本文中,我將描述如何使用Spring模型檢視控制器(MVC)端點和使用Spring Boot和Liberty App Accelerator的Spring REST端點建立一個簡單的“Hello World”應用程式。
IBM Liberty Vs Tomcat
簡單來說,IBM Liberty就是 IBM WebSphere Application Server 的簡化版,Liberty是從WebSphere 8.5.5引入的,與傳統的WAS不同,Liberty側重於雲應用與微服務的支援,使用者可以配置細粒度級別的應用程式所需的元件,所以伺服器啟動速度非常快,佔用空間也很小,跟tomcat一樣輕量級,一般都是用於企業級應用比較多,尤其是金融類、或者大型商業應用等,提供很多商業級的擴充套件元件。
開始之前
建立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:[email protected]
*/
@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
,可以看到如下結果: