使用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
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的全面屬性列表:
您可以隨意調整這些屬性的值以滿足您的需求。目前,我們處理以下屬性:User,Password,DatabaseName,ServerName,URL,url 和CreateDatabaseIfNotExist:
所以,我們在連線本地主機到資料庫命名的玩家,將如果不存在則自動建立。使用者和密碼的憑據是 root和root (如果您願意,請使用其他帳戶憑據)。預設的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,JndiDataSourceLookup
API如下:
@組態
公共 類 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步:定義主類
我們的應用程式的主要類依賴於SpringBootServletInitializer
API:
@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
。