Vert.x 是一款非常轻量级的响应式Java框架,非常适合Java新人练手,或者需要快速上线的小型Java web项目。中文文档:VertxChina 。下面使用Vert.x编写一个服务端应用,主要处理接口请求,对数据库增删改查。
项目 | 内容 |
---|---|
开发工具 | Intellij IDEA CE |
构建工具 | gradle |
jdk | 1.8.0_45(注:jdk一定要1.8+) |
数据库 | MySQL 5.1 |
新建工程,并建立如下文件结构:
ProjectName
↓ config
↓ src
↓↓ main
↓↓↓ java
↓↓↓↓ com
↓↓↓↓↓ victor
↓↓↓↓↓↓ common
↓↓↓↓↓↓ entity
↓↓↓↓↓↓ service
↓↓↓↓↓↓ verticle
↓↓ test
其中,/config 目录存放连接数据库的配置文件config_database.json,具体配置参见:Data access。本例使用MySQL,配置文件如下:
// /config/config_database.json
{
"host" : "127.0.0.1",
"port" : 3306,
"maxPoolSize" : 30,
"username" : "root",
"password" : "root",
"database" : "Demo",
"charset" : "UTF-8"
}
此外,/common 目录存放一些常量,如API,SQL语句等;/entity 存放实体类,/service 和 /verticle 为主要业务逻辑实现。
根目录下的build.gradle:
group 'com.victor'
version '1.0-SNAPSHOT'
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile 'io.vertx:vertx-unit:3.4.2'
compile 'io.vertx:vertx-core:3.4.2'
compile 'io.vertx:vertx-web:3.4.2'
compile 'io.vertx:vertx-codegen:3.4.2'
compile 'io.vertx:vertx-mysql-postgresql-client:3.4.2'
compile 'org.slf4j:slf4j-log4j12:1.7.2'
}
task annotationProcessing(type: JavaCompile, group: 'build') {
source = sourceSets.main.java
classpath = configurations.compile
destinationDir = project.file('src/main/generated')
options.compilerArgs = [
"-proc:only",
"-processor", "io.vertx.codegen.CodeGenProcessor",
"-AoutputDirectory=${destinationDir.absolutePath}"
]
}
sourceSets {
main {
java {
srcDirs += 'src/main/generated'
}
}
}
compileJava {
targetCompatibility = 1.8
sourceCompatibility = 1.8
dependsOn annotationProcessing
}
jar {
archiveName = 'demo-backend-fat.jar'
manifest {
attributes "Main-Class": "io.vertx.core.Launcher",
"Main-Verticle": "com.victor.verticles.MainVerticle"
}
from {
configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
}
}
首先看看dependencies。
vertx-core是必不可少的,vertx-web用来处理客户端请求,如果需要在应用中发起网络请求,还需要依赖vertx-web-client。
vertx-codegen用来处理实体类的Json转化,后面会详细说。
vertx-mysql-postgresql-client处理mysql/postgresql的连接、操作。
最后org.slf4j:slf4j-log4j12是因为运行的时候遇到了
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
错误,最后stackoverflow一下加了这个包解决了,目前还不是很清楚啥原因。
targetCompatibility = 1.8
sourceCompatibility = 1.8
这两个值设为1.8是因为Vert.x是基于Java8的。
最后jar里面,
archiveName指定打包成jar的包名,
manifest中,Main-Class写成Launcher是官方建议的,
Main-Verticle是指入口Verticle,这里指定为MainVerticle,
会Android的同学肯定觉得很熟悉,有点像AndroidManifest.xml里指定入口Activity是吧?