1. 程式人生 > >使用Payara資料來源在Payara伺服器下執行Spring Boot應用程式

使用Payara資料來源在Payara伺服器下執行Spring Boot應用程式

步驟1:在Payara 5中新增Connector / J(JDBC MySQL Connector)

為了與MySQL通訊,似鯖水狼牙魚需要聯結器/ J。下載並解壓縮Connector / J的存檔後,找到名為mysql-connector-java-5.1.47.jar的JAR檔案  。應該在{PAYARA_HOME | / glassfish / lib資料夾中手動複製此檔案,如下面的螢幕截圖所示:

圖片標題

第2步:從CLI 啟動Payara domain1

開啟控制檯/終端,導航到{PAYARA_HOME} / bin資料夾,然後鍵入asadmin start-domain

命令:

圖片標題

命令成功執行後(這可能需要幾秒鐘),您應該看到訊息:“ 命令start-domain已成功執行。”

但是,有一種可能性,而不是這個好訊息獲得NullPointerException,如下所示:

圖片標題

最有可能的是,您獲得此錯誤是因為您安裝並預設為Payara不支援的Java(JDK)版本。我們必須通過設定AS_JAVA支援的JDK發行版來取悅Payara 。JDK 8是最安全的。在同一臺機器上安裝多個JDK沒有任何錯誤或不尋常,所以不要擔心這個方面。只是指示Payara使用相容的。

要設定  AS_JAVA,請編輯檔案{PAYARA_HOME} /glassfish/config/asenv.bat

(在Windows計算機上)或{PAYARA_HOME} /glassfish/config/asenv.conf(在Linux計算機上)並新增到底部它是一行,set AS_JAVA=C:\Program Files\Java\jdk1.8.0_111(在Windows機器上)或AS_JAVA="/usr/lib/jvm/jdk1.8.0_111"(對於Linux機器):

圖片標題

完成此編輯後,asadmin start-domain再次執行該命令。這一次,它應該按預期工作。

此外,開啟您最喜歡的瀏覽器並導航到  localhost:4848。不久,您應該看到Payara Server Console

,如下所示:

圖片標題

步驟3:通過Payara介面建立新的JDBC連線池

在左側面板中,找到JDBC | “JDBC連線池”節點,然後單擊它。這將開啟包含當前配置的連線池的JDBC連線池嚮導:

圖片標題

在此嚮導中,單擊“ 新建”按鈕,然後開始為MySQL配置新的連線池。將池名稱填充為MySqlPool(或任何其他名稱),將資源型別填充為javax.sql.DataSource,將資料庫驅動程式供應商填充為MySql

圖片標題

完成後,只需單擊右上角的“ 下一步”按鈕。這將帶您進入此配置過程的第二步。

在第二步中,我們有一個由幾個部分組成的嚮導。第一部分名為  常規設定,它應包含已設定的正確設定。因此,向下滾動到第二部分,池設定

圖片標題

我們將保留預設設定,但是,從這裡,您可以輕鬆自定義連線池設定,例如最大池大小。 

再次向下滾動,您將找到“ 交易”部分。我們也不會修改此部分,但如果您希望事務在特定的隔離級別(例如,可重複讀取)中執行,那麼這是在其他配置旁邊執行此操作的地方。

圖片標題

在此嚮導下方,我們有Additional Properties表。此面板包含特定屬性,具體取決於資料庫供應商。在這種情況下,此表包含特定於MySQL的全面屬性列表:

圖片標題

您可以隨意調整這些屬性的值以滿足您的需求。目前,我們處理以下屬性:UserPasswordDatabaseNameServerNameURLurl CreateDatabaseIfNotExist

圖片標題

所以,我們在連線本地主機到資料庫命名的玩家,將如果不存在則自動建立。使用者和密碼的憑據是  rootroot (如果您願意,請使用其他帳戶憑據)。預設的MySQL埠是3306.找到並編輯其中的每個屬性後,只需單擊“  完成”按鈕(位於右上角)。 

建立了新的連線池,現在,您應該在連線池列表中看到它,如下圖所示:

圖片標題

但是,我們怎麼知道我們的連線池工作正常?好吧,Payara提供了一個很酷的  Ping設施。對於初學者,單擊連線池名稱並等待其載入。

圖片標題

你應該看到一個Ping按鈕。在單擊此按鈕之前,請確保MySQL正在執行符合您的設定。在這種情況下,它應該在localhost:3306上執行。單擊此按鈕後,您應收到Ping成功訊息或錯誤訊息,說明出現了什麼問題。

圖片標題

好的,到目前為止一切順利!

第4步:通過Payara介面建立JDBC資源

現在,我們必須建立一個利用我們的連線池的JDBC資源。為此,在左側面板中,單擊JDBC | JDBC資源節點。不久,您應該看到可用JDBC資源的列表:

圖片標題

單擊“ 新建”按鈕以啟動用於建立JDBC資源的嚮導。對於標識JDBC資源的唯一JNDI名稱,請鍵入  jdbc / players。對於池名稱,從下拉列表中選擇MySqlPool連線池。 

圖片標題

最後,單擊右上角的“ 確定”按鈕。您應該看到列出的新JDBC資源如下:

圖片標題

完成!現在,只需關閉Payara Server Console即可。此外,我們專注於Spring Boot應用程式。

第5步:獲取Spring Boot Kickoff應用程式

為了開發將使用上述JDBC資源的應用程式,我們選擇了一個基於Maven的Spring Boot啟動應用程式,其中包含以下啟動程式:  starter-data-jpa,  starter-jdbc,  starter-web,  starter-test

一種簡單快捷的方法是使用Spring Initializr嚮導。

第6步:準備Payara的pom.xml

為了在Payara下部署我們的Spring Boot應用程式,我們需要調整pom.xml檔案,如下所示:

- 通常,Spring Boot應用程式打包為JAR,但我們需要一個WAR,所以準備  <packaging>相應的:

< 包裝>戰爭</ packaging >

- 預設情況下,在Tomcat上部署Spring Boot應用程式,因此我們需要排除Tomcat:

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

- 一旦我們刪除了Tomcat,由於缺少Servlet API,我們無法編譯程式碼,因此我們需要以明確的方式提供Servlet API依賴:

< 依賴>
    < groupId > javax.servlet </ groupId >
    < artifactId > javax.servlet-api </ artifactId >
    < scope >提供</ scope >
</ dependency >

- 這裡提供完整的pom.xml 。

步驟7:通過JNDI,JDBC / Players配置資料來源

請記住,我們已經建立了一個JDBC資源和一個連線池,它具有JNDI名稱jdbc / players的入口點  。現在,我們指示我們的應用程式javax.sql.DataSource 通過此JNDI名稱公開。為此,我們依賴Spring,JndiDataSourceLookupAPI如下:

@組態
公共 類 DataSourceConfigurer {
 
    private  static  final  String  JNDI  =  “jdbc / players” ;
 
    @Bean(destroyMethod  =  “”)//禁止將潛在的close()方法推斷為驅逐艦
    public  DataSource  dataSource()丟擲 DataSourceLookupFailureException {
        JndiDataSourceLookup  dataSourceLookup  =  new  JndiDataSourceLookup();
        return  dataSourceLookup。getDataSource(JNDI);
    }
}

此類的完整原始碼可在此處獲得。

第8步:建立模型

此外,我們建立了一個名為的簡單JPA實體Player

@實體
@Table(name = “player”)
public  class  Player  實現 Serializable {
 
    private  static  final  long  serialVersionUID  =  1L ;
 
    @ID    
    私人 長 身份 ;
 
    私有 字串 名稱 ;
    私人 弦 城 ;
    私人 INT  年齡 ;
    ...
}

這個類的完整原始碼在這裡。

步驟9:定義典型的Spring儲存庫

接下來,我們定義一個典型的Spring儲存庫  Player

@Repository
public  interface  PlayerRepository  擴充套件 JpaRepository < Player,Long > {        
}

這個類的完整原始碼在這裡。

第10步:建立一個典型的Spring服務

此外,我們定義了一個典型的Spring服務,它將公開兩種方法:一種用於持久化id為1的單個玩家的方法,另一種用於通過id查詢此玩家的方法:

@服務
公共 類 PlayerService {
 
    private  final  PlayerRepository  playerRepository ;
 
    public  PlayerService(PlayerRepository  playerRepository){
        這個。playerRepository  =  playerRepository ;
    }
 
    public  Player  newPlayerWithIdOne(){
       ...
    }
 
    public  Player  findFirstPlayer(){
       ...
    }
}

這個類的完整原始碼在這裡。

步驟11:通過@RestController公開此服務

接下來,我們建立一個公共Spring控制器,公開兩個端點,一個GET端點(/ fetch)和一個POST端點(/ new):

@RestController
public  class  PlayerController {
 
    私人 最終的 PlayerService  playerService ;
 
    public  PlayerController(PlayerService  playerService){
        這個。playerService  =  playerService ;
    }
 
    @GetMapping(“/ fetch”)
    public  Player  fetchPlayer(){
 
        返回 playerService。findFirstPlayer();
    }
 
    @PostMapping(“/ new”)
    public  Player  newPlayer(){
 
        返回 playerService。newPlayerWithIdOne();
    }
 
}

這個類的完整原始碼在這裡。

第12步:定義主類

我們的應用程式的主要類依賴於SpringBootServletInitializerAPI:

@SpringBootApplication
@EntityScan(“com.jpa.model”)   
@ComponentScan({ “com.http.requests”,“com.services” })
@EnableJpaRepositories(“com.jpa.queries”)
公共 類 SpringBootPayaraMySqlKickoffApplication  擴充套件 SpringBootServletInitializer {
 
    @覆蓋
    protected  SpringApplicationBuilder  configure(SpringApplicationBuilder  應用程式){
        退貨 申請。來源(SpringBootPayaraMySqlKickoffApplication。類);
    }
 
    public  static  void  main(String [] args){
        SpringApplication。執行(SpringBootPayaraMySqlKickoffApplication。類,ARGS);
    }
}

這個類的完整原始碼在這裡。

步驟13:從簡單的HTML頁面使用端點

您可以通過curl,ARC Rest Client,Postman等輕鬆測試端點(/ fetch/ new),但我們更喜歡基於普通AJAX的簡單HTML頁面:

< script >
    function  newPlayer(){
        var  xhttp  =  new  XMLHttpRequest();
        ...
    }
 
    function  fetchPlayer(){
        var  xhttp  =  new  XMLHttpRequest();
        ...
    }
...
< 按鈕 型別= “按鈕”  的onclick = “newPlayer()” > 插入 一個 單一的 播放器 與 ID  1 < /按鈕>
< 按鈕 型別= “按鈕”  的onclick = “fetchPlayer()” > 獲取 播放機 與 ID  1 < /按鈕>

這個頁面的完整原始碼在這裡。

步驟14:提供眾所周知的Application.Properties

如您所知,Spring Boot依賴application.properties檔案作為主配置檔案。我們為這個檔案提供了一些有用的Hibernate設定:

#建立架構,銷燬以前的資料
小號p - [R 我Ñ 克。Ĵ p 一個。ħ 我b Ë ř Ñ 一噸ë 。d d 升- 一個Ù 噸Ô = C ^ - [R Ë 一噸ë
 
#顯示已執行的SQL 
小號p - [R 我Ñ 克。Ĵ p 一個。小號ħ ö 瓦特- 小號q 升 = 噸- [R ù ë
 
#display statistics
小號p - [R 我Ñ 克。Ĵ p 一個。p - [R ø p é ř 噸我Ë 小號。ħ 我b Ë ř Ñ 一噸ë 。克Ë Ñ Ë ř 一噸ë _ 小號噸一噸我小號噸我Ç 小號 = 噸- [R ù ë

步驟15:新增web.xml和glassfish-web.xml描述符

為了以防萬一,您將需要標準部署描述符(web.xml)。我們提供了一個空的:

<?xml  version =“1.0”encoding =“UTF-8”?>
< web-app  metadata-complete = “true”
         xmlns = “http://xmlns.jcp.org/xml/ns/javaee”
         xmlns:xsi = “http://www.w3.org/2001/XMLSchema-instance”
         xsi:schemaLocation = “http://xmlns.jcp.org/xml/ns/javaee
     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd”
         version = “3.1” >
 
</ web-app >

此外,如果您需要Glassfish Descriptor(glassfish-web.xml),那麼它(我們已經用它來自定義根上下文):

<?xml  version =“1.0”encoding =“UTF-8”?>
<!DOCTYPE glassfish-web-app PUBLIC ...>
   < glassfish-web-app  error-url = “” >
   ...
   <! - 設定友好的上下文根 - >
   < context-root > / players </ context-root >
 
   <! - 將預設字元編碼從ISO-8859-1更改為UTF-8  - >
   < parameter-encoding  default-charset = “UTF-8” />
</ glassfish-web-app >

這個檔案的完整原始碼在這裡。

步驟16:編譯應用程式並找到WAR

好吧,是時候編譯應用程式了。當然,我們可以通過不同的方式(例如,從我們最喜歡的IDE等)執行此操作,但是我們只需mvn clean install從專案資料夾中執行  命令:

圖片標題

現在,您應該有一個包含應用程式WAR 的/ target資料夾。

步驟17:在Payara上部署WAR

只有一個重要步驟將我們與執行應用程式(部署步驟)區分開來。同樣,我們可以從我們最喜歡的IDE部署應用程式(例如,從NetBeans很容易實現),或者通過Maven,但這次,我們可以通過Payara介面進行部署。

啟動Payara Server Console並導航到Applications節點。單擊Deploy按鈕:

圖片標題

此外,我們需要在Payara(部署)上傳WAR檔案。只需單擊Choose File按鈕,然後選擇我們應用程式的WAR。此外,選擇Web Application作為應用程式型別

圖片標題

單擊右上角的“ 確定”按鈕,等待Payara完成部署。最後,您將自動重定向到包含已部署應用程式的表。

第18步:啟動應用程式

在此表中,找到我們的應用程式並單擊“ 啟動”按鈕:

圖片標題

此時,您將看到兩個可用連結,一個在埠8080(http)上,另一個在埠8181(https)上。點選8080連結:

圖片標題

該應用程式應該啟動,如下所示:

圖片標題

現在,我們可以嘗試持久並獲取ID為1的播放器。例如,您可以嘗試以下三個步驟的順序:

圖片標題

完成!要停止Payara,只需在命令列執行:asadmin stop-domain