[toc]
專案需求分析
前言
今年跳槽後工作比較悠閒,而且本人對android開發確實覺得興趣乏乏,剛好SpringBoot目前很火,而且可以和我android的kotlin母語配合食用,所以,開坑一個SpringBoot學習系列。
目標
- 開發一個純粹的KotlinApp專案
- 開發一個SpringBoot專案(前後端不分離,因為我不會寫html)
專案分析
App
仿著餓了麼來,除開支付模組(因為我沒有賬號),其他特效,自定義View之類的,估摸著自己學習,少用或者禁用第三方,儘量杜絕面向百度程式設計
後臺
api模組
提供api給與app呼叫,儘量規範化,模組化。
管理後臺模組
使用Bootstrap佈局,寫類似jsp的頁面模組,雖然不優雅,不好看。
開擼
模組解釋
後臺的話,打算分成3個模組:
- Buyer
- Seller
- Service
其中
Buyer 模組為app提供介面
Seller 模組提供ModelAndView,也就是管理後臺
Service模組提供Service,dao,資料操作
實際操作
新建SpringBoot專案
如果還不會新建專案,可以檢視如何新建SpringBoot專案
刪除多餘檔案
刪除專案目錄下src目錄,即刪除後,專案目錄為:
新建module
分別新建Buyer,Seller,Service 三個module,新建方法為:
修改根專案的pom.xml檔案
修改根專案的pom.xml檔案,去除掉springBoot的依賴(這些依賴我們放在Service Module裡面)
這裡只是我個人的看法,也許不對
其實這裡我對這個專案的認識是:
沒錯,就是android狗最熟悉的Eclipse(其實我沒用過,不過這個比較好解釋)
platform 也就是我們一開始新建的那個空殼專案,其實相當於Eelipse的workPlace,也就是我們的工作目錄
Service 其實就是我們提供資料的Library,我們每個功能模組都會依賴它,在裡面寫Dao,Service
Buyer 賣家模組,其實就是一個提供入口的功能模組,依賴了Service模組,呼叫裡面的Service
Seller 買家模組,解釋同Buyer
好的,我知道還是解釋得很爛,那我們看圖。
其中根目錄的pom.xml為:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modules>
<module>Buyer</module>
<module>Service</module>
<module>Seller</module>
</modules>
<groupId>com.ly</groupId>
<artifactId>platform</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>platform</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
複製程式碼
注意這裡根模組引用了3個module:
<module>Buyer</module>
<module>Service</module>
<module>Seller</module>
複製程式碼
其中Service的pom.xml檔案比較繁雜,因為主要Springboot依賴的檔案,通用第三方都會寫在這裡
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>platform</artifactId>
<groupId>com.ly</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--lombok外掛-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<!--微信外掛-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>2.9.0</version>
</dependency>
<!--spring-boot-configuration:spring boot 配置處理器; -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.2.2</version>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
複製程式碼
而Buyer以及Seller的pom.xml高度類似:
Buyer
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>platform</artifactId>
<groupId>com.ly</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Buyer</artifactId>
<dependencies>
<dependency>
<groupId>com.ly</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<type>pom</type>
<version>1.5.2.RELEASE</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<start-class>com.ly.platform.PlatformApplication</start-class>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.3.RELEASE</version>
<configuration>
<mainClass>${start-class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
複製程式碼
Seller
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>platform</artifactId>
<groupId>com.ly</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Seller</artifactId>
<dependencies>
<dependency>
<groupId>com.ly</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<type>pom</type>
<version>1.5.2.RELEASE</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<start-class>com.ly.platform.PlatformApplication</start-class>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.3.RELEASE</version>
<configuration>
<mainClass>${start-class}</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
複製程式碼
值得注意的是這邊Buyer以及Service模組都引入了Service
<dependencies>
<dependency>
<groupId>com.ly</groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
複製程式碼
每個模組自己的獨立配置檔案
值得注意的是配置檔案,我們一共有3個配置檔案 (properties/yml)
分別位於:Buyer,Seller,Service
其中所負責的功能不同:
Service模組的配置檔案
負責通用配置,例如配置常量,配置資料庫,Redis等等
Buyer/Seller模組的配置檔案
負責配置各自的埠,日誌檔案目錄等等不需要通用的配置
使用方法
Service
按去配置資料庫連線,寫dao,service 不表,我們寫好了如下檔案:
其中service提供的方法為:
/**
* Banner
*/
public interface BannerService {
List<Banner> findAll();
}
複製程式碼
Buyer
配置埠為8888
寫好對應的controller
@RestController
@RequestMapping("api/home")
@Api(value = "首頁模組", description = "管理Banner")
public class BannerController {
@Autowired
private BannerService bannerService;
@GetMapping("banner")
@ApiOperation("查詢所有的Banner")
public List<Banner> getAllBanner() {
return bannerService.findAll();
}
}
複製程式碼
Seller
配置埠為8889
server.port=8889
複製程式碼
寫對應的controller
@RestController
@RequestMapping("web/home")
@Api(value = "首頁模組", description = "管理Banner")
public class BannerController {
@Autowired
private BannerService bannerService;
@GetMapping("banner")
@ApiOperation("查詢所有的Banner")
public List<Banner> getAllBanner() {
return bannerService.findAll();
}
}
複製程式碼
Tips 計劃Seller是前後端不分離的,所以這裡應該返回的ModelAndView,不過先寫著測試吧
結果測試
這裡使用postman進行介面測試,介面地址分別為:
localhost:8888/platform/api/home/banner
複製程式碼
localhost:8889/platform/web/home/banner
複製程式碼
結果為: