<h2>一、quarkus 是什么?为什么要用quarkus</h2>
<p>quarkus是Redhat开源的云原生微服务框架, 相比较成熟的SpringCloud, 为什么要用quarkus?</p>
<p><strong>主要有以下几点原因:</strong></p>
<ol><li>Spring系列框架臃肿、复杂, 更像是一个全家桶. 而quarkus 简单、高效, 工具先进</li><li>启动速度, quarkus可以在5秒内启动, 而spring对于一个golang开发者来说, 这个速度直接无法忍受.</li><li>quarkus可以热编译, 无需手动编译和重启服务, 而Spring的热编译..</li><li>与其他工具集成, Spring集成了大部分的工具, 但你把DI换成guice试试, quarkus可以很方便的集成工具, 虽然框架本身包含的东西不多</li><li>quarkus不依赖tomcat或jetty, 可以编译为原生应用, 性能大幅提高</li><li>quarkus耦合低, 项目结构干净, 适合使用代码生成器.</li></ol>
<p> </p>
<h2>二、创建一个quarkus项目</h2>
<p>您可以使用maven或gradle来快速创建一个quarkus项目, 具体方法见quarkus网站, quarkus 只需要创建一个Resource类, 就可以启动服务. 零配置. </p>
<p>另外:quarkus 对Kotlin支持极为友好, 本文将创建一个使用Kotlin+Gradle的项目. 项目的配置文件: build.gradle.kts内容如下:</p>
<p><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9fafc5631ba1215db74dcb775c5144aa.png"></p>
<pre class="blockcode">plugins{
java
kotlin("jvm") version ("1.3.72")
kotlin("plugin.allopen") version ("1.3.72")
id("io.quarkus") version("1.4.2.Final")
}
allOpen {
annotation("javax.enterprise.context.ApplicationScoped")
annotation("javax.enterprise.context.RequestScoped")
}
repositories {
maven("http://maven.aliyun.com/nexus/content/groups/public/")
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
implementation("io.quarkus:quarkus-kotlin:1.4.2.Final")
implementation("io.quarkus:quarkus-resteasy:1.4.2.Final")
implementation("io.quarkus:quarkus-resteasy-jsonb:1.4.2.Final")
testImplementation("io.quarkus:quarkus-junit5:1.4.2.Final")
}
tasks.withType<Test> {
useJUnitPlatform()
}
// 代码生成器
tasks.create("generate").doFirst {
exec{
workingDir("./tto")
commandLine("sh","-c","./tto.sh")
}
}
tasks.withType<JavaCompile>().configureEach {
options.encoding="utf-8"
options.compilerArgs = listOf("-Xdoclint:none", "-Xlint:none", "-nowarn")
}
</pre>
<p><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9fafc5631ba1215db74dcb775c5144aa.png"></p>
<p> </p>
<h2>三、配置并启动项目</h2>
<p>您可以创建一个类, 并添加注解:@ApplicationScoped , 作为系统启动类, 代码如下:</p>
<p><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9fafc5631ba1215db74dcb775c5144aa.png"></p>
<pre class="blockcode">@ApplicationScoped
class Application {
fun onStart(@Observes event: StartupEvent?) {
println("app started..")
}
}</pre>
<p><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9fafc5631ba1215db74dcb775c5144aa.png"></p>
<p>这并不是必须的, 因为上文提到了, 可能需要集成其他工具. 接着我们创建一个服务如下:</p>
<p><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9fafc5631ba1215db74dcb775c5144aa.png"></p>
<pre class="blockcode">import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
import javax.ws.rs.core.MediaType
@Path("/hello")
class HelloResource {
@GET@Path("/{name}")
@Produces(MediaType.APPLICATION_JSON)
fun hello(@PathParam("name") name:String): String {
return "hello ${name}"
}
}</pre>
<p><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9fafc5631ba1215db74dcb775c5144aa.png"></p>
<p>运行命令启动服务</p>
<pre class="blockcode">gradle quarkusDev</pre>
<p>访问服务</p>
<pre class="blockcode">curl http://localhost:8080/hello/jarrysix
> hello jarrysix</pre>
<h2> </h2>
<h2>三、使用数据源</h2>
<p>通过上面的步骤, 我们已能运行quarkus, 接下来我们通过极为简单的方式来完成数据源的访问.</p>
<p>首先, 我们需要添加配置:</p>
<pre class="blockcode">quarkus.datasource.db-kind=h2
quarkus.datasource.username=username-default
quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:default
quarkus.datasource.jdbc.min-size=3
quarkus.datasource.jdbc.max-size=13</pre>
<p>创建实体类</p>
<p><img alt="复制代码" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-9fafc5631ba1215db74dcb775c5144aa.png"></p>
<pre class="blockcode">@Entity
public class Gift {
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="giftSeq")
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
private String name;
public String get |
|