SpringBoot(一) 新建專案

Mr_凌宇發表於2019-02-18

[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,新建方法為:

新建module
選中該項

修改根專案的pom.xml檔案

修改根專案的pom.xml檔案,去除掉springBoot的依賴(這些依賴我們放在Service Module裡面)
這裡只是我個人的看法,也許不對
其實這裡我對這個專案的認識是:

借一張圖說話

沒錯,就是android狗最熟悉的Eclipse(其實我沒用過,不過這個比較好解釋)
platform 也就是我們一開始新建的那個空殼專案,其實相當於Eelipse的workPlace,也就是我們的工作目錄
Service 其實就是我們提供資料的Library,我們每個功能模組都會依賴它,在裡面寫Dao,Service
Buyer 賣家模組,其實就是一個提供入口的功能模組,依賴了Service模組,呼叫裡面的Service
Seller 買家模組,解釋同Buyer

好的,我知道還是解釋得很爛,那我們看圖。

image.png

其中根目錄的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檔案

其中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
複製程式碼

結果為:

image.png
image.png

結尾

沒啥好結尾的,加油!
附地址:
App
App

相關文章