spring boot+mybatis+mysql+Swagger2構(gòu)建完整項(xiàng)目

從0到1構(gòu)建一個(gè)spring boot + mybatis的項(xiàng)目

圖片發(fā)自簡(jiǎn)書App

前言:
為什么選擇spring boot?或許對(duì)于經(jīng)歷過(guò)編寫大量的配置文件的小伙伴,有一點(diǎn)就可以打動(dòng)他-----零配置運(yùn)行一個(gè)程序。而且spring boot內(nèi)嵌Tomcat,當(dāng)然,spring boot還有好多的優(yōu)點(diǎn),大大提高了我們的開發(fā)進(jìn)度。

所以為了有更多的時(shí)間陪女朋友,快點(diǎn)加入spring boot的學(xué)習(xí)吧?。?!

學(xué)習(xí)此篇文章,如果你對(duì)以下知識(shí)有一定的了解將會(huì)更有利于你對(duì)這篇文章的理解。
1.spring基礎(chǔ)知識(shí),如IOC,AOP等
2.mybatis基礎(chǔ)
3.mysql基礎(chǔ)
4.maven基礎(chǔ)


好了,開始我們spring boot的學(xué)習(xí)吧
首先你的電腦上需要以下環(huán)境(環(huán)境統(tǒng)一,不然會(huì)出現(xiàn)奇怪的問題):
1.安裝 IntelliJ Idea(旗艦版)
2.java環(huán)境(版本1.8或以上)
3.數(shù)據(jù)庫(kù)Mysql(版本5.7或以上)

一、新建spring boot項(xiàng)目

1.打開idea,并創(chuàng)建一個(gè)新的項(xiàng)目:

1.png

2.選擇Spring Initializr選項(xiàng),并選擇一個(gè)SDK,點(diǎn)擊Next


2.png

3.填寫Group(一般為公司域名反寫)和Artifact(項(xiàng)目名),此項(xiàng)目的管理工具為Maven(當(dāng)然你也可以使用Gradle),打包方式 為jar包,java版本為1.8,點(diǎn)擊Next


3.png

4.這里選擇先添加Web依賴,點(diǎn)擊Next


4.png

5.點(diǎn)擊Finish


5.png

6.好了,我們的spring boot項(xiàng)目就已經(jīng)創(chuàng)建好了,我們來(lái)看一下項(xiàng)目的結(jié)構(gòu)。對(duì)于.mvn mvnw mvnw.cmd這幾個(gè)文無(wú)關(guān)緊要,看著煩,可以刪除。

6.png

7.我們來(lái)運(yùn)行一下項(xiàng)目,圖中點(diǎn)擊任意哪個(gè)都可以,快捷鍵為Ctrl+Shift+F10

7.png

8.在控制臺(tái)中會(huì)輸出一大串日志信息,你如果看到了下圖中的信息,恭喜你項(xiàng)目已經(jīng)啟動(dòng)成功了


8.png

9.在瀏覽器訪問localhost:8080,你將看到以下信息

9.png

我們?cè)?code>com.example.demo下創(chuàng)建一個(gè)controller包,在controller包下創(chuàng)建一個(gè)Hello.java類。
src/main/java/com/example/demo/controller/Hello.java

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Hello {
    @RequestMapping("/hi")
    public String hello(){
        return "hello world";
    }
}

重新啟動(dòng)我們的項(xiàng)目,并訪問localhost:8080/hi我們的spring boot項(xiàng)目的hello world程序就已經(jīng)成功了,我們沒有寫一行配置,就已經(jīng)將一個(gè)spring boot程序運(yùn)行起來(lái)了。

10.png

二、集成Mybatis

1.我們整理一下我們的項(xiàng)目目錄結(jié)構(gòu):
11.png
2.在pom.xml文件中添加如下代碼

demo/pom.xml

<dependencies>
        ..........
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        .........
</dependencies>
3.創(chuàng)建數(shù)據(jù)庫(kù)和表

建表語(yǔ)句如下:(你也可以使用mysql workbench這個(gè)免費(fèi)工具,官方可下載)

CREATE TABLE `test`.`user` (
  `user_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用戶id',
  `user_name` VARCHAR(45) NOT NULL COMMENT '用戶名',
  `password` VARCHAR(45) NOT NULL COMMENT '密碼',
  `age` INT NOT NULL COMMENT '年齡',
  PRIMARY KEY (`user_id`))
COMMENT = '用戶表';

這樣我們就已經(jīng)將mybatis和mysql集成到我們的spring boot項(xiàng)目中去了。下面教大家如何配置使用mybatis.(包括如何使用mybatis generator插件生成代碼。)

4編寫mybatis代碼生成的配置

src/main/resources/mybatis下新建一個(gè)mybatis-generator.xml

src/main/resources/mybatis/mybatis-generator.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <!--導(dǎo)入屬性配置-->
    <properties resource="datasource.properties"/>

    <!--指定特定數(shù)據(jù)庫(kù)的jdbc驅(qū)動(dòng)jar包的位置-->
    <classPathEntry location="${db.driverLocation}"/>

    <context id="default" targetRuntime="MyBatis3">

        <!-- optional,旨在創(chuàng)建class時(shí),對(duì)注釋進(jìn)行控制 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--jdbc的數(shù)據(jù)庫(kù)連接 -->
        <jdbcConnection
                driverClass="${db.driverClassName}"
                connectionURL="${db.url}"
                userId="${db.username}"
                password="${db.password}">
        </jdbcConnection>


        <!-- 非必需,類型處理器,在數(shù)據(jù)庫(kù)類型和java類型之間的轉(zhuǎn)換控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>


        <!-- Model模型生成器,用來(lái)生成含有主鍵key的類,記錄類 以及查詢Example類
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在該項(xiàng)目下所在的路徑
        -->
        <javaModelGenerator targetPackage="com.example.demo.pojo" targetProject="./src/main/java">
            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對(duì)model添加 構(gòu)造函數(shù) -->
            <property name="constructorBased" value="true"/>
            <!-- 是否對(duì)類CHAR類型的列的數(shù)據(jù)進(jìn)行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model對(duì)象是否 不可改變  即生成的Model對(duì)象不會(huì)有 setter方法,只有構(gòu)造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!--mapper映射文件生成所在的目錄 為每一個(gè)數(shù)據(jù)庫(kù)的表生成對(duì)應(yīng)的SqlMap文件 -->
        <sqlMapGenerator targetPackage="mybatis/mapper" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 客戶端代碼,生成易于使用的針對(duì)Model對(duì)象和XML配置文件 的代碼
                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper對(duì)象
                type="MIXEDMAPPER",生成基于注解的Java Model 和相應(yīng)的Mapper對(duì)象
                type="XMLMAPPER",生成SQLMap XML文件和獨(dú)立的Mapper接口
        -->

        <!-- targetPackage:mapper接口dao生成的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.dao" targetProject="./src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的后綴 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 每個(gè)table標(biāo)簽對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一張表,用于生成pojo -->
        <table tableName="user" domainObjectName="User" enableCountByExample="true" enableUpdateByExample="true"
               enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true"/>

        <!-- geelynote mybatis插件的搭建 -->
    </context>
</generatorConfiguration>

新建resources/datasource.properties并添加如下代碼:(#號(hào)后面的為注釋,這個(gè)文件將會(huì)被resources/mybatis/mybatis-generator.xml引用)

#數(shù)據(jù)庫(kù)本地的驅(qū)動(dòng)jar包路徑(你的路徑和此處不一定相同)
db.driverLocation=C:/Users/sifu/.m2/repository/mysql/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar
#數(shù)據(jù)庫(kù)驅(qū)動(dòng)
db.driverClassName=com.mysql.jdbc.Driver
#數(shù)據(jù)庫(kù)url
db.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&verifyServerCertificate=false
#數(shù)據(jù)庫(kù)用戶名
db.username=root
#數(shù)據(jù)庫(kù)密碼
db.password=sifu

修改application.properties名稱為application.yml并且添加如下代碼(此文件中有嚴(yán)格的代碼格式):
resources/application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&verifyServerCertificate=false
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: sifu
mybatis:
  mapper-locations: classpath:mybatis/mapper/*.xml
  type-aliases-package: com.example.demo.pojo

解釋:
url:數(shù)據(jù)庫(kù)鏈接地址
driver-class-name:數(shù)據(jù)庫(kù)驅(qū)動(dòng)
username:數(shù)據(jù)庫(kù)用戶名
password:數(shù)據(jù)庫(kù)密碼
mapper-locations:指定生成的*.xml文件路徑
type-aliases-package:指定實(shí)體類路徑

為什么修改使用yml格式的配置文件,原因是為了使代碼更加簡(jiǎn)潔。以上application.yml代碼等同于application.properties的如下代碼:

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&verifyServerCertificate=false
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=sifu

mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.example.demo.pojo

看一下,是不是yml格式的配置更加簡(jiǎn)潔?至于用哪個(gè),自己決定咯,個(gè)人推薦用yml格式的??!

5.添加mybatis generator插件

修改pom.xml文件,添加mybatis的代碼生成插件

.......
    <build>
        <plugins>
            ..........
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                    <configurationFile>${project.basedir}/src/main/resources/mybatis/mybatis-generator.xml
                    </configurationFile>
                </configuration>
            </plugin>
        </plugins>
    </build>

雙擊mybatisi-generator:generate(注意:不要運(yùn)行多次,否則會(huì)生成重復(fù)的代碼,編譯時(shí)會(huì)出現(xiàn)神奇的bug

12.png

此時(shí)Build成功:

13.png

讓我們?cè)倏匆幌挛覀兊捻?xiàng)目結(jié)構(gòu):

14.png

多了四個(gè)文件,這些就是mybatis generator插件生成的代碼。
UserMapper:用于操作數(shù)據(jù)庫(kù)的接口(沒有實(shí)現(xiàn)類,對(duì)應(yīng)UserMapper.xml文件)
User:實(shí)體類,對(duì)應(yīng)數(shù)據(jù)庫(kù)中的一張表
UserExample:用于做條件增刪改查用的
UserMapper.xml:里面是一些sql語(yǔ)句

用這些生成的代碼來(lái)操作數(shù)據(jù)庫(kù)面對(duì)大部分業(yè)務(wù)已經(jīng)足夠了,如果不能滿足,那就自己在UserMapper.javaUserMapper.xml中去編寫添加接口和sql語(yǔ)句吧!這個(gè)由你自己去探索!!

現(xiàn)在我們的spring boot + mybatis項(xiàng)目已經(jīng)基本構(gòu)建完成了,我們完全可以成功的運(yùn)行我們的項(xiàng)目。但是到此處還不夠,我們還需要一點(diǎn)其他的工具,讓我們開發(fā)項(xiàng)目更加便捷快速。接著看吧!

三、集成測(cè)試工具Swagger2

為了我們能夠更好的測(cè)試我們編寫的代碼,我們?cè)趐om.xml中添加如下代碼,集成swagger2.
pom.xml

<dependencies>
        .......
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
</dependencies>

注意:swagger的版本最好設(shè)置高一點(diǎn),版本過(guò)低時(shí),參數(shù)如果是對(duì)象,調(diào)試會(huì)出現(xiàn)問題,這里設(shè)置為2.7.0版本。

并且新建com/example/demo/config/SwaggerConfig.java---swagger的配置文件,添加如下代碼:

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Spring Boot中使用Swagger2構(gòu)建RESTful APIs")
                .description("")
                .termsOfServiceUrl("")
                .contact(new Contact("sifu","www.xxx.com","123456@qq.com"))
                .version("1.0")
                .build();
    }

}

注意.apis(RequestHandlerSelectors.basePackage(""))中請(qǐng)?zhí)顚懻_的controller路徑。

下面讓我們來(lái)編寫一個(gè)業(yè)務(wù)邏輯的代碼,往我們的數(shù)據(jù)庫(kù)中插入一條數(shù)據(jù)
新建com/example/demo/service/UserService.java

package com.example.demo.service;

import com.example.demo.pojo.User;

public interface UserService {
    int add(User user);
}

新建com/example/demo service/impl/UserserviceImpl.java

package com.example.demo.service.impl;

import com.example.demo.dao.UserMapper;
import com.example.demo.pojo.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    public int add(User user) {
        return userMapper.insert(user);
    }
}

新建com/example/demo/controller/UserController.java

package com.example.demo.controller;

import com.example.demo.pojo.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/add")
    public int add(User user) {
        return userService.add(user);
    }
}

現(xiàn)在我們運(yùn)行一下我們的程序

15.png

ps:臥槽,報(bào)錯(cuò)了??逗我玩呢?浪費(fèi)我這么多時(shí)間

不要急嘛,報(bào)錯(cuò)原因是無(wú)法找到UserMapper.java.我們?cè)趩?dòng)類DemoAppliction.java上添加一個(gè)注解@MapperScan("com.example.demo.dao"),用于掃描com/example/demo/dao包下的NameMapper.java文件(如果我們不集成Swagger2,則不會(huì)報(bào)這個(gè)錯(cuò)誤,也不需要添加此的注解

com/example/demo/DemoAppliction.java

package com.example.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.demo.dao")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

好了,啟動(dòng)我們的項(xiàng)目,并訪問http://localhost:8080/swagger-ui.html我們就可以看到一個(gè)調(diào)試的界面。

16.png

是不是感覺這界面看起來(lái)很爽,很清晰,但是如果只是好看,那就太low了,重點(diǎn)是在于它的功能強(qiáng)大。

填寫參數(shù),因?yàn)閭鞯膮?shù)是User對(duì)象,所以需要填的參數(shù)都是實(shí)體類中的字段。(UserId是自增的,所以不填)點(diǎn)擊Try it out!

17.png

Response Body為返回值為1,說(shuō)明數(shù)據(jù)庫(kù)中已經(jīng)有一條數(shù)據(jù)插入了,狀態(tài)碼為200,說(shuō)明請(qǐng)求成功了。

現(xiàn)在我們來(lái)看一下我們的數(shù)據(jù)庫(kù)中的數(shù)據(jù),我們使用idea自帶的數(shù)據(jù)庫(kù)連接工具

18.png

彈出此界面,填寫一些必要的信息,點(diǎn)擊Test Connection,如果測(cè)試成功,那就點(diǎn)擊ok:

19.png

雙擊user,我們看到了我們之前添加的數(shù)據(jù):


20.png

到此,我們的spring boot + mybatis 已經(jīng)完全構(gòu)建成功了,接下來(lái)就是編寫業(yè)務(wù)邏輯層的代碼了,這個(gè)就由你自己去探索了。

四、集成Spring AOP(日志打印使用Slf4j)

下面我們繼續(xù)讓我們的項(xiàng)目添加Spring AOP
1.pom.xml添加如下代碼:

<dependencies>
    ........
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
    </dependency>
</dependencies>

2.下載安裝一個(gè)插件(記得一定要安裝好哦!):lombok(很好用,下面再講)
3.新建com/example/demo/aspect/HttpAspect.java,并添加如下代碼(此處為了演示,只添加一些日志打印的代碼):

package com.example.demo.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

@Slf4j
@Aspect
@Component
public class HttpAspect {

    @Pointcut(value = "execution(public * com.example.demo.controller.*.*(..))")
    public void log() {
    }

    @Before("log()")
    public void doBefore(JoinPoint joinPoint) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // url
        log.info("url={}", request.getRequestURL());
        // port
        log.info("port={}", request.getRemotePort());
        // method
        log.info("method={}", request.getMethod());
        // ip
        log.info("ip={}", request.getRemoteAddr());
        // class_method
        log.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        // 參數(shù)
        log.info("args={}", Arrays.toString(joinPoint.getArgs()));
    }

    @AfterReturning(returning = "object", pointcut = "log()")
    public void doAfterReturning(Object object) {
        log.info("response={}", object);
    }
}

光看此處的代碼,我們發(fā)現(xiàn)我們根本就沒有聲明log這個(gè)變量,但是我們卻使用了它。這就是lombok插件的功能,在這個(gè)類上有一個(gè)@Slf4j的注解(要使用此注解,lombok插件請(qǐng)安裝好),添加這個(gè)注解就相當(dāng)于在此類中添加了如下代碼:

import org.slf4j.Logger;
.....
private final Logger log = org.slf4j.LoggerFactory.getLogger(HttpAspect.class);

注意:此處的log對(duì)象必須看清楚是org.slf4j.Logger的實(shí)例

添加了這段代碼的作用是:在執(zhí)行controller中的方法之前會(huì)先執(zhí)行此類中的方法。

當(dāng)然,lombok插件的功能遠(yuǎn)遠(yuǎn)不止這一點(diǎn),剩下的就是你自己去探索了。

這里推薦一個(gè)關(guān)于lombok的使用的學(xué)習(xí)教程:https://my.oschina.net/u/1024107/blog/889184

Spring AOP學(xué)習(xí)教程:http://412887952-qq-com.iteye.com/blog/2305333

擴(kuò)展

最后,為了我們能更好的進(jìn)行開發(fā),下面我們繼續(xù)添加一點(diǎn)功能。

1.熱部署

pom.xml添加如下代碼:

<dependencies>
        ........
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
</dependencies>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
            .......
        </plugins>
</build>

設(shè)置:


image.png

按:ctrl+shift+a

image.png

勾選:
image.png

這樣,你修改了你項(xiàng)目的代碼就不需要點(diǎn)重啟,它會(huì)自動(dòng)幫你部署,但是重啟有一定的延時(shí),但是比重新點(diǎn)擊重啟速度快,至于用不用,完全取決于你自己了。(修改static文件中的靜態(tài)html,css,js等不會(huì)重新編譯,但是訪問時(shí)頁(yè)面依然會(huì)改變)

2.添加MybatisCodeHelper插件

這個(gè)插件直接下載安裝即可(龜速下載,我也很無(wú)奈)。作用就是能夠快速的在UserMapper.javaUerMapper.xml之間快速跳轉(zhuǎn).

21.png

點(diǎn)擊圖中標(biāo)記的圖標(biāo)就可以隨意跳轉(zhuǎn)了。

lombok插件一樣,此插件也不僅僅這個(gè)功能,剩下的你就慢慢探索去吧!

3.打包

編寫完代碼之后,我們就需要將項(xiàng)目進(jìn)行打包了

22.png

雙擊package,項(xiàng)目根目錄將會(huì)出現(xiàn)一個(gè)target目錄在此目錄下將會(huì)有一個(gè).jar文件,這個(gè)就是我們需要的已經(jīng)打包好了的可執(zhí)行文件。

注意:我們這個(gè)項(xiàng)目使用的spring boot版本為1.5.6.RELEASE(此時(shí)最新穩(wěn)定版本),在運(yùn)行package時(shí),由于插件也是使用的1.5.6.RELEASE版本,會(huì)造成打包失?。ň唧w原因我也不太清楚,可能是這個(gè)版本的插件有問題),所以解決辦法就是修改插件的版本號(hào),此處改為1.5.4.RELEADSE版本。
ps:一遍一遍調(diào)試總結(jié)出來(lái)的結(jié)果,我也很無(wú)奈呀=-=

<plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.4.RELEASE</version>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
            .....
</plugins>

下圖標(biāo)記的地方就是我們需要的jar文件

23.png
4.運(yùn)行

現(xiàn)在只要有這個(gè)jar文件,同時(shí)Java的環(huán)境,就可以運(yùn)行這個(gè)jar包了。打開cmd,運(yùn)行命令:

java -jar demo.jar
24.png

服務(wù)就啟動(dòng)了?。。?!

當(dāng)然此命令后面也可以加參數(shù):

java -jar demo.jar --server.port=8888

25.png

運(yùn)行在8888端口號(hào)上,實(shí)際上就相當(dāng)于在application.yml文件中添加如下代碼

server:
  port: 8888

至于想設(shè)置其他的什么參數(shù),我想你應(yīng)該知道怎么做了吧

最后,我已經(jīng)將此項(xiàng)目分享到GitHub上了,大家可以去download或者clonehttps://github.com/Gitsifu/demo


下面我們?cè)诹牧某R姷呐渲茫?/p>

server:
  port: 8080
  context-path: /user

port:設(shè)置項(xiàng)目啟動(dòng)的端口號(hào)(上面提到了哦!),默認(rèn)端口號(hào)為8080
context-path:設(shè)置項(xiàng)目訪問的url路徑根路徑(例如添加了/user則訪問鏈接http://localhost:8080/swagger-ui.html就應(yīng)該變成這樣的http://localhost:8080/user/swagger-ui.html

。。。。。。此處省略一萬(wàn)字節(jié)。。。。。

有關(guān)Spring Boot的基礎(chǔ)學(xué)習(xí)下面推薦幾篇文章:

微服務(wù)開發(fā)的入門級(jí)框架Spring Boot詳解(一)
微服務(wù)開發(fā)的入門級(jí)框架Spring Boot詳解(二)
微服務(wù)開發(fā)的入門級(jí)框架Spring Boot詳解(三)
微服務(wù)開發(fā)的入門級(jí)框架Spring Boot詳解(四)
微服務(wù)開發(fā)的入門級(jí)框架Spring Boot詳解(五)

好了,現(xiàn)在整個(gè)項(xiàng)目的基本架構(gòu)已經(jīng)基本完成了,我也該去陪我女朋友了,各位小伙伴再見咯。

。

。
哦,對(duì)了,我不是沒女朋友么,哪來(lái)的女朋友陪,哎。。。還是敲我的代碼去了。。。

誰(shuí)說(shuō)我沒對(duì)象,new一個(gè)就可以了

聲明:原創(chuàng)文章,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容