为了与MySQL通信,似鲭水狼牙鱼需要连接器/ J。下载并解压缩Connector / J的存档后,找到名为mysql-connector-java-5.1.47.jar的JAR文件 。应该在{PAYARA_HOME | / glassfish / lib文件夹中手动复制此文件,如下面的屏幕截图所示:
打开控制台/终端,导航到{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,如下所示:
在左侧面板中,找到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成功消息或错误消息,说明出现了什么问题。
好的,到目前为止一切顺利!
现在,我们必须创建一个利用我们的连接池的JDBC资源。为此,在左侧面板中,单击JDBC | JDBC资源节点。不久,您应该看到可用JDBC资源的列表:
单击“ 新建”按钮以启动用于创建JDBC资源的向导。对于标识JDBC资源的唯一JNDI名称,请键入 jdbc / players。对于池名称,从下拉列表中选择MySqlPool连接池。
最后,单击右上角的“ 确定”按钮。您应该看到列出的新JDBC资源如下:
完成!现在,只需关闭Payara Server Console即可。此外,我们专注于Spring Boot应用程序。
为了开发将使用上述JDBC资源的应用程序,我们选择了一个基于Maven的Spring Boot启动应用程序,其中包含以下启动程序: starter-data-jpa, starter-jdbc, starter-web, starter-test。
一种简单快捷的方法是使用Spring Initializr向导。
为了在Payara下部署我们的Spring Boot应用程序,我们需要调整pom.xml文件,如下所示:
- 通常,Spring Boot应用程序打包为JAR,但我们需要一个WAR,所以准备
相应的:
< 包装>战争 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 。
请记住,我们已经创建了一个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);
}
}
此类的完整源代码可在此处获得。
此外,我们创建了一个名为的简单JPA实体Player
:
@实体
@Table(name = “player”)
public class Player 实现 Serializable {
private static final long serialVersionUID = 1L ;
@ID
私人 长 身份 ;
私有 字符串 名称 ;
私人 弦 城 ;
私人 INT 年龄 ;
...
}
这个类的完整源代码在这里。
接下来,我们定义一个典型的Spring存储库 Player
:
@Repository
public interface PlayerRepository 扩展 JpaRepository < Player,Long > {
}
这个类的完整源代码在这里。
此外,我们定义了一个典型的Spring服务,它将公开两种方法:一种用于持久化id为1的单个玩家的方法,另一种用于通过id查找此玩家的方法:
@服务
公共 类 PlayerService {
private final PlayerRepository playerRepository ;
public PlayerService(PlayerRepository playerRepository){
这个。playerRepository = playerRepository ;
}
public Player newPlayerWithIdOne(){
...
}
public Player findFirstPlayer(){
...
}
}
这个类的完整源代码在这里。
接下来,我们创建一个公共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();
}
}
这个类的完整源代码在这里。
我们的应用程序的主要类依赖于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);
}
}
这个类的完整源代码在这里。
您可以通过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 < /按钮>
这个页面的完整源代码在这里。
如您所知,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 ù ë
为了以防万一,您将需要标准部署描述符(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 >
这个文件的完整源代码在这里。
好吧,是时候编译应用程序了。当然,我们可以通过不同的方式(例如,从我们最喜欢的IDE等)执行此操作,但是我们只需mvn clean install
从项目文件夹中运行 命令:
现在,您应该有一个包含应用程序WAR 的/ target文件夹。
只有一个重要步骤将我们与运行应用程序(部署步骤)区分开来。同样,我们可以从我们最喜欢的IDE部署应用程序(例如,从NetBeans很容易实现),或者通过Maven,但这次,我们可以通过Payara界面进行部署。
启动Payara Server Console并导航到Applications节点。单击Deploy按钮:
此外,我们需要在Payara(部署)上传WAR文件。只需单击Choose File按钮,然后选择我们应用程序的WAR。此外,选择Web Application作为应用程序的类型:
单击右上角的“ 确定”按钮,等待Payara完成部署。最后,您将自动重定向到包含已部署应用程序的表。
在此表中,找到我们的应用程序并单击“ 启动”按钮:
此时,您将看到两个可用链接,一个在端口8080(http)上,另一个在端口8181(https)上。点击8080链接:
该应用程序应该启动,如下所示:
现在,我们可以尝试持久并获取ID为1的播放器。例如,您可以尝试以下三个步骤的顺序:
完成!要停止Payara,只需在命令行运行:asadmin stop-domain
。