此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