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 上。