1. 程式人生 > >liberty | 在IDEA整合Springboot與IBM liberty

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,可以看到如下結果: 在這裡插入圖片描述