此archetype(脚手架)用于快速生成基于spring-boot, mybatis的RESTful Web Service项目。
虽然Spring给出SpringBoot的RESTful Web Service项目例子,但仅仅是控制层端,数据层并未给出。须要用上数据层的话,还须要研究下。最近想快速的作个网页搜索引擎,缺一个web界面,因而决定我将我所研究的记录下,作成一个archetype,之后就能够快速生成REST接口项目,生成的项目是扫描Mapper,读取数据层数据,返回RESTfull数据。
REST接口可用于先后端分离项目,前端的脚手架我推荐使用飞冰,可快速生成vue前端页面项目。html
下载jc-spring-boot-rest-archetype脚手架源码,进入根目录执行执行如下命令安装前端
git clone https://gitee.com/jevondata/jc-spring-boot-rest-archetype.git mvn install
在shell命令行里,随便进入一个新的目录,执行maven的命令:vue
mvn archetype:generate
执行过程以下:java
always@always-PC:/mydata/test$ mvn archetype:generate Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp [INFO] Scanning for projects... [INFO] [INFO] ------------------< org.apache.maven:standalone-pom >------------------- [INFO] Building Maven Stub Project (No POM) 1 [INFO] --------------------------------[ pom ]--------------------------------- [INFO] [INFO] >>> maven-archetype-plugin:3.0.1:generate (default-cli) > generate-sources @ standalone-pom >>> [INFO] [INFO] <<< maven-archetype-plugin:3.0.1:generate (default-cli) < generate-sources @ standalone-pom <<< [INFO] [INFO] [INFO] --- maven-archetype-plugin:3.0.1:generate (default-cli) @ standalone-pom --- [INFO] Generating project in Interactive mode [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: remote -> com.jc.archetype:jc-spring-boot-rest-archetype (-) Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1 Downloading from jc-spring-boot-rest-archetype-repo: http://nexus.jevoncode.com/nexus/content/groups/public/com/jc/archetype/jc-spring-boot-rest-archetype/0.0.1.0-SNAPSHOT/maven-metadata.xml Downloaded from jc-spring-boot-rest-archetype-repo: http://nexus.jevoncode.com/nexus/content/groups/public/com/jc/archetype/jc-spring-boot-rest-archetype/0.0.1.0-SNAPSHOT/maven-metadata.xml (800 B at 12 kB/s) Define value for property 'groupId': com.jc.web Define value for property 'artifactId': jc-web Define value for property 'version' 1.0-SNAPSHOT: : Define value for property 'package' com.jc.web: : Confirm properties configuration: groupId: com.jc.web artifactId: jc-web version: 1.0-SNAPSHOT package: com.jc.web Y: : Y [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Archetype: jc-spring-boot-rest-archetype:0.0.1.0-SNAPSHOT [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.jc.web [INFO] Parameter: artifactId, Value: jc-web [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: package, Value: com.jc.web [INFO] Parameter: packageInPathFormat, Value: com/jc/web [INFO] Parameter: package, Value: com.jc.web [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] Parameter: groupId, Value: com.jc.web [INFO] Parameter: artifactId, Value: jc-web [INFO] Project created from Archetype in dir: /mydata/test/jc-web [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 37.535 s [INFO] Finished at: 2018-12-16T01:54:17+08:00 [INFO] ------------------------------------------------------------------------
此过程会让你选择groupId, artifactId, version, package,根据本身所需选择输入便可,最后选择Y,即生成如下代码:mysql
always@always-PC:/mydata/test$ tree . └── jc-web ├── pom.xml └── src └── main ├── assembly --maven-assembly-plugin插件用的配置文件,绑定在pacakge阶段 │ └── dep.xml ├── environment --打包时用的环境参数 │ ├── development.properties │ └── test.properties ├── java --项目Java代码结构采用典型的项目结构, controller, service, mapper, entity │ └── com │ └── jc │ └── web │ ├── App.java │ ├── dto │ │ └── JcPage.java │ ├── entity │ │ └── JcMyInfo.java │ ├── exception │ │ └── JcMyInfoException.java │ ├── GreetingController.java │ ├── Greeting.java │ ├── mapper │ │ ├── JcMyInfoMapper.java │ │ └── JcMyInfoMapper.xml │ └── service │ ├── JcMyInfoServiceImpl.java │ └── JcMyInfoService.java ├── resources │ ├── application.properties --spring-boot相关的配置文件 │ ├── data.sql --启动时初始化数据库测试数据 │ ├── logback.xml --日志配置文件 │ ├── schema.sql --启动时初始化数据库测试表结构 │ └── system.properties └── scripts --打包后,用于启动项目的脚本,可配置JVM内存等信息 ├── env.sh ├── service.sh ├── shutdown.sh └── startup.sh 16 directories, 23 files
生成的代码能够直接编译打包:git
always@always-PC:/mydata/test$ cd jc-web/ always@always-PC:/mydata/test/jc-web$ mvn package
打包完后,解压文件,执行startup.sh便可启动服务web
always@always-PC:/mydata/test/jc-web$ cp target/jc-web-1.0-SNAPSHOT-development-bin.tar.gz ../ always@always-PC:/mydata/test/jc-web$ cd ../ always@always-PC:/mydata/test$ tar -zxf jc-web-1.0-SNAPSHOT-development-bin.tar.gz always@always-PC:/mydata/test$ cd jc-web-1.0-SNAPSHOT-development/ always@always-PC:/mydata/test/jc-web-1.0-SNAPSHOT-development$ ./bin/startup.sh startup.sh based at /mydata/test/jc-web-1.0-SNAPSHOT-development service.sh based at /mydata/test/jc-web-1.0-SNAPSHOT-development /gucci/jdk1.8.0_191/bin/java -Xmx4048m -Xms256m -server -cp /mydata/test/jc-web-1.0-SNAPSHOT-development/conf:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/antlr-2.7.7.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/aspectjweaver-1.9.2.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/byte-buddy-1.9.5.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/classmate-1.4.0.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/dom4j-2.1.1.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/h2-1.4.197.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/hibernate-commons-annotations-5.0.4.Final.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/hibernate-core-5.3.7.Final.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/hibernate-validator-6.0.13.Final.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/HikariCP-3.2.0.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jackson-annotations-2.9.0.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jackson-core-2.9.7.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jackson-databind-2.9.7.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jackson-datatype-jdk8-2.9.7.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jackson-datatype-jsr310-2.9.7.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jackson-module-parameter-names-2.9.7.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jandex-2.0.5.Final.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/javassist-3.23.1-GA.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/javax.activation-api-1.2.0.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/javax.annotation-api-1.3.2.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/javax.persistence-api-2.2.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/javax.transaction-api-1.3.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jaxb-api-2.3.1.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jboss-logging-3.3.2.Final.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jc-web-1.0-SNAPSHOT.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/jul-to-slf4j-1.7.25.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/log4j-api-2.11.1.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/log4j-to-slf4j-2.11.1.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/logback-classic-1.2.3.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/logback-core-1.2.3.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/mybatis-3.4.6.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/mybatis-spring-1.3.2.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/mybatis-spring-boot-autoconfigure-1.3.2.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/mybatis-spring-boot-starter-1.3.2.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/slf4j-api-1.7.25.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/snakeyaml-1.23.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-aop-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-aspects-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-beans-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-autoconfigure-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-aop-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-data-jpa-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-jdbc-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-json-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-logging-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-tomcat-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-boot-starter-web-2.1.1.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-context-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-core-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-data-commons-2.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-data-jpa-2.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-expression-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-jcl-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-jdbc-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-orm-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-tx-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-web-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/spring-webmvc-5.1.3.RELEASE.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/tomcat-embed-core-9.0.13.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/tomcat-embed-el-9.0.13.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/tomcat-embed-websocket-9.0.13.jar:/mydata/test/jc-web-1.0-SNAPSHOT-development/lib/validation-api-2.0.1.Final.jar: com.jc.web.App nohup: redirecting stderr to stdout
查看日志文件spring
always@always-PC:/mydata/test/jc-web-1.0-SNAPSHOT-development$ tail -f logs/server.log 12-16 13:15:39 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] 12-16 13:15:39 [main] INFO org.apache.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read 12-16 13:15:40 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8080 (http) with context path '' 12-16 13:15:40 [main] INFO com.jc.web.App - Started App in 6.167 seconds (JVM running for 6.797) 12-16 13:15:40 [main] INFO com.jc.web.App - started Spring Boot
访问接口http://localhost:8080/, 即返回如下信息:sql
{"id":1,"content":"Hello, This is jevoncode, and my blog is https://segmentfault.com/u/huangxiaoshu/articles"}
BINGO! 到这里RESTful Web Service项目就生成好了。shell
pom模板使用jdk8,编码格式都是utf-8
数据库用的是H2内存数据库,因此可根据本身需求修改为mysql等。
此脚手架用了都是我本身的本地私库, 因此编译安装时需自行修改nexus地址或删掉。
Window ——> Preferences ——> Maven ——> Archetypes ——> Add Remote Catalog
Catalog File: http://nexus.jevoncode.com/ne...
Description: nexus.jevoncode.com
New ——> Project ——> Maven ——> Add Archetypes