RESTEasy H2 教程
最后修改于 2023 年 1 月 10 日
RESTEasy H2 教程展示了如何在 RESTEasy 创建的 RESTful Web 应用程序中使用 H2 数据库。
RESTEasy
RESTEasy 是一个用于开发 RESTful Web 服务的 Java 框架。它是 JAX-RS 2.0 规范的完全认证和可移植的实现。JAX-RS 2.0 规范是 JCP(Java Community Process)规范,它提供了一个 Java API,用于通过 HTTP 协议访问 RESTful Web 服务。
RESTEasy 可以在任何 Servlet 容器中运行。它包含一套丰富的提供程序,如 XML、JSON、YAML、Fastinfoset、Multipart、XOP 和 Atom。
H2
H2 是一个用 Java 编写的关系数据库管理系统。它可以嵌入到 Java 应用程序中,或者以客户端-服务器模式运行。它也可以在内存模式下使用。
RESTEasy H2 示例
下面的示例是一个简单的 RESTful 应用程序,它返回 H2 数据库的版本。为了连接到数据库并执行查询,我们使用了 Spring 的 JdbcTemplate,这是一个基于纯 JDBC 的 Java 库。
$ tree
.
├── nb-configuration.xml
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── zetcode
│ │ ├── conf
│ │ │ └── AppResConfig.java
│ │ ├── resource
│ │ │ └── MyResource.java
│ │ └── service
│ │ └── VersionService.java
│ ├── resources
│ └── webapp
│ └── META-INF
│ └── context.xml
└── test
└── java
这是项目结构。
<?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.zetcode</groupId>
<artifactId>RestEasyH2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>RestEasyH2</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.1.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-servlet-initializer</artifactId>
<version>3.1.4.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.196</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
这是 Maven POM 文件。它包含了 RESTEasy、H2 和 Spring JdbcTemplate 的依赖项。
<?xml version="1.0" encoding="UTF-8"?> <Context path="/RestEasyH2"/>
在 Tomcat 的 context.xml 配置文件中,我们定义了应用的上下文路径。
package com.zetcode.conf;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("rest")
public class AppConfig extends Application {
}
这是应用程序配置类。Application 定义了 JAX-RS 应用程序的组件并提供额外的元数据。
@ApplicationPath("rest")
使用 @ApplicationPath 注解,我们设置了 RESTful Web 服务的路径。
package com.zetcode.service;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
public class VersionService {
public static String getVersion() {
SimpleDriverDataSource ds = new SimpleDriverDataSource();
ds.setDriver(new org.h2.Driver());
ds.setUrl("jdbc:h2:mem:");
String sql = "SELECT H2VERSION()";
JdbcTemplate jtm = new JdbcTemplate(ds);
String version = jtm.queryForObject(sql, String.class);
return version;
}
}
VersionService 连接到在内存中创建的 H2 数据库并返回其版本。
SimpleDriverDataSource ds = new SimpleDriverDataSource();
ds.setDriver(new org.h2.Driver());
ds.setUrl("jdbc:h2:mem:");
我们创建了一个简单的数据源。使用 jdbc:h2:mem: URL 字符串,我们创建了一个仅供单个连接使用的内存私有数据库。数据库在数据库连接关闭时关闭。
String sql = "SELECT H2VERSION()";
此 SQL 语句返回 H2 的版本。
JdbcTemplate jtm = new JdbcTemplate(ds); String version = jtm.queryForObject(sql, String.class);
我们使用 Spring JdbcTemplate 来执行 SQL 查询。
package com.zetcode.resource;
import com.zetcode.service.VersionService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("version")
public class MyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String message() {
String h2Version = VersionService.getVersion();
String message = String.format("H2 version: %s", h2Version);
return message;
}
}
这是 MyResource 类。
@Path("version")
public class MyResource {
通过 @Path 注解,我们指定了资源响应的 URL。
@GET
@Produces(MediaType.TEXT_PLAIN)
public String message() {
String h2Version = VersionService.getVersion();
String message = String.format("H2 version on Tomcat 9: %s", h2Version);
return message;
}
@GET 注解表明注解的方法响应 HTTP GET 请求。通过 @Produces 注解,我们定义该方法生成纯文本。我们调用服务方法并返回一个消息字符串。
$ curl localhost:8080/RestEasyH2/rest/version H2 version: 1.4.196
应用程序部署在 Tomcat 上后,我们使用 curl 向应用程序发送一个 GET 请求。我们获得 H2 数据库的版本。
在本教程中,我们使用 RESTEasy 和 H2 数据库创建了一个简单的 RESTFul 应用程序。我们使用 Spring 的 JdbcTemplate 连接到 H2。该应用程序已部署在 Tomcat 上。