使用Vert.x快速上线Java web(一)

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

使用Vert.x快速上线Java web(一)_第1张图片
目录结构

其中,/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是吧?

你可能感兴趣的:(使用Vert.x快速上线Java web(一))