[前端學java09-SpringBoot實戰(zhàn)] 多模塊配置 + Mybatis-plus + 單多模塊打包部署

導航

[react] Hooks

[封裝01-設計模式] 設計原則 和 工廠模式(簡單抽象方法) 適配器模式 裝飾器模式
[封裝02-設計模式] 命令模式 享元模式 組合模式 代理模式

[React 從零實踐01-后臺] 代碼分割
[React 從零實踐02-后臺] 權限控制
[React 從零實踐03-后臺] 自定義hooks
[React 從零實踐04-后臺] docker-compose 部署react+egg+nginx+mysql
[React 從零實踐05-后臺] Gitlab-CI使用Docker自動化部署

[源碼-webpack01-前置知識] AST抽象語法樹
[源碼-webpack02-前置知識] Tapable
[源碼-webpack03] 手寫webpack - compiler簡單編譯流程
[源碼] Redux React-Redux01
[源碼] axios
[源碼] vuex
[源碼-vue01] data響應式 和 初始化渲染
[源碼-vue02] computed 響應式 - 初始化胚嘲,訪問颂跨,更新過程
[源碼-vue03] watch 偵聽屬性 - 初始化和更新
[源碼-vue04] Vue.set 和 vm.$set
[源碼-vue05] Vue.extend

[源碼-vue06] Vue.nextTick 和 vm.$nextTick
[部署01] Nginx
[部署02] Docker 部署vue項目
[部署03] gitlab-CI

[數(shù)據(jù)結構和算法01] 二分查找和排序

[深入01] 執(zhí)行上下文
[深入02] 原型鏈
[深入03] 繼承
[深入04] 事件循環(huán)
[深入05] 柯里化 偏函數(shù) 函數(shù)記憶
[深入06] 隱式轉(zhuǎn)換 和 運算符
[深入07] 瀏覽器緩存機制(http緩存機制)
[深入08] 前端安全
[深入09] 深淺拷貝
[深入10] Debounce Throttle
[深入11] 前端路由
[深入12] 前端模塊化
[深入13] 觀察者模式 發(fā)布訂閱模式 雙向數(shù)據(jù)綁定
[深入14] canvas
[深入15] webSocket
[深入16] webpack
[深入17] http 和 https
[深入18] CSS-interview
[深入19] 手寫Promise
[深入20] 手寫函數(shù)
[深入21] 數(shù)據(jù)結構和算法 - 二分查找和排序
[深入22] js和v8垃圾回收機制
[深入23] JS設計模式 - 代理败去,策略碑诉,單例

[前端學java01-SpringBoot實戰(zhàn)] 環(huán)境配置和HelloWorld服務
[前端學java02-SpringBoot實戰(zhàn)] mybatis + mysql 實現(xiàn)歌曲增刪改查
[前端學java03-SpringBoot實戰(zhàn)] lombok烦绳,日志态蒂,部署
[前端學java04-SpringBoot實戰(zhàn)] 靜態(tài)資源 + 攔截器 + 前后端文件上傳
[前端學java05-SpringBoot實戰(zhàn)] 常用注解 + redis實現(xiàn)統(tǒng)計功能
[前端學java06-SpringBoot實戰(zhàn)] 注入 + Swagger2 3.0 + 單元測試JUnit5
[前端學java07-SpringBoot實戰(zhàn)] IOC掃描器 + 事務 + Jackson
[前端學java08-SpringBoot實戰(zhàn)總結1-7] 階段性總結
[前端學java09-SpringBoot實戰(zhàn)] 多模塊配置 + Mybatis-plus + 單多模塊打包部署

(一) 前置知識

(1) 一些單詞

batch 批 分批

Stalled 停滯
pratices 實踐骡苞,通常的做法 // best practices 最佳實踐
key map 鍵盤映射

artifact 人工制品
look up 查找 查閱 // lookup parent from repository
property 屬性
annotation 注解 // java中的注解
surefire 萬全 可靠的
verify 驗證 校驗

(2) mac版 idea快捷鍵記錄

1. 全局查找
command + shift + r
2. 調(diào)出actions
command + 3
3. 設置
command + ,
4. 文件間的跳轉(zhuǎn)
command + e
5. 信息提示
command + 1
6. 跳轉(zhuǎn)到別的類
control + 鼠標左鍵
7. 復制文件的引用路徑
鼠標右鍵 - copy path - copy reference
8. 左右移動代碼塊
- 左移動 shift + tab
- 右移動 tab
9. 查找文件
- ctrl + h


1. command + k 查找下一個
2. ctrl + h 查找文件
3. 設置快捷鍵 ( command + , ) => ( keymap ) => ( 搜索find ) => ( 添加查找快捷鍵 ) => ( command + f )

(3) pom.xml配置項

  • 項目的打包類型
    • packaging
      • pom jar war
      • 默認打包類型packaging=jar巷嚣,即默認是打成jar包
  • pom模型版本
    • modelVersion
  • 項目信息
    • 項目唯一標識 groupId 喘先,包括幾個字段,比如com.wu7廷粒,com是域窘拯,wu7是域名
    • 項目名或者模塊名 artifactId
    • 項目版本 version
    • 項目名稱 name
    • 打包方式(項目的打包類型) packaging pom jar war
    • 一般來說,( 包名根目錄 ) = ( groupId ) + ( artifactId )坝茎,不允許重復
    • packageName = groupId + artifactId
  • 父級項目 parent
    • 也包括 groupId涤姊, artifactIdversion嗤放,relativePath
    • relativePath
      • relativePath用來指定查找該父項目 pom.xml 的相對路徑
      • 默認:../pom.xml
      • 優(yōu)先級:relativePath > 本地倉庫 > 遠程倉庫
      • 1.設定一個空值思喊,將始終從倉庫中獲取,而不從本地路徑獲取次酌,如 <relativePath/>
      • 2.沒有relativePath標簽表示從 ../pom.xml 來查找
  • 屬性信息 properties
    • java的版本:java.version
    • 編譯字符編碼 project.build.sourceEncoding
    • 輸出字符編碼 project.reporting.outputEncoding
    • 打包時跳過test <skipTests>true</skipTests>
  • ================================= 依賴關系 dependencies
  • 編譯 build
    • 插件集 plugins
    • 插件 plugin
  • ================================= 模塊 modules
    • 在父模塊中用來表示包含的 ( 子模塊 )

(4) jackson

image.png
  • 之前掘金寫的文章

  • jackson fastjson gson

  • 安裝

    • 一般在web開發(fā)中使用了 spring-boot-starter-web 啟動器的話恨课,已經(jīng)包含了 jackson
    • 如果沒有使用上邊的starter,則需要自己安裝 spring-boot-starter-json 依賴
      <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-json</artifactId>
      </dependency>
      
  • jackson常用注解

    • @JsonFormat
    • @JsonPropertyOrder
    • @JsonProperty
    • @JsonInclude
    • @JsonIgnore
    • @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "GMT+8") - 格式化時間岳服,用于類的屬性
    • @JsonPropertyOrder(value = {"singer", "album"}) - 調(diào)整屬性的順序剂公,用于類
    • @JsonProperty("aaa") - 修改返回數(shù)據(jù)的屬性名稱,修改為aaa
    • @JsonInclude(JsonInclude.Include.NON_NULL) - 包含則不返回該屬性吊宋,包含null則不返回該屬性
    • @JsonIgnore - 返回的屬性不包括該字段
  • @JsonFormat - 格式化時間

    • ( 全局配置 ) 和 ( bean中單獨配置@JsonFormat() )
    • 日期格式化配置優(yōu)先級 ( bean對象中屬性 @JsonFormat 注解 > 全局配置)
    • @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss", timezone = "GMT+8")
1. 全局配置
- 在application.yml中全局配置jackson

spring:
  jackson:
    date-format: YYYY-MM-dd HH:mm:ss # 全局時間格式化
    time-zone: GMT+8 # 時區(qū)
2. 局部配置
- 實體中使用 @JsonFormat()

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName("music")
public class MpMusicBean {
    Integer id;
    String name;
    String album;
    String singer;

    @TableField(value = "startTime") // value是數(shù)據(jù)庫字段名
    @JsonFormat(pattern = "YYYY-MM-dd") // jackson格式化時間纲辽,優(yōu)先級 ( bean中設置 > 全局配置 )
    Timestamp startTime;

    @TableField(value = "endTime") // value是數(shù)據(jù)庫字段名
    @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss") // jackson格式化時間,優(yōu)先級 ( bean中設置 > 全局配置 )
    Timestamp endTime;
}
  • @JsonPropertyOrder - 調(diào)整屬性順序
@JsonPropertyOrder(value = {"singer", "album"}) // jackson調(diào)整屬性順序璃搜,singer在album前面
public class MpMusicBean {
    Integer id;
    String name;
    String album;
    String singer;
}

結果:
未使用前
    {
            "album": "七里香112233",
            "singer": "周杰倫112233",

    },
使用后
    {
            "singer": "周杰倫112233", //----------------- 1
            "album": "七里香112233",  // ---------------- 2
    },

  • @JsonProperty
    @JsonProperty("start") // jackson修改返回數(shù)據(jù)的屬性名
    @TableField(value = "startTime") // value是數(shù)據(jù)庫字段名
    @JsonFormat(pattern = "YYYY-MM-dd") // jackson格式化時間拖吼,優(yōu)先級 ( bean中設置 > 全局配置 )
    // 這三個注解的最終效果:將數(shù)據(jù)庫中的startTime列的數(shù)據(jù)key對應實體的startTime,然后將返回值修改成star腺劣,并格式化時間
    Timestamp startTime;
  • @JsonInclude
@JsonInclude(JsonInclude.Include.NON_NULL) // jackson,包含null因块,則不返回該字段
String singer;
  • @JsonIgnore
@JsonIgnore // jackson返回值中不包含該屬性橘原,忽略該屬性
String name;

(5) SimpleDateFormat,sring,Timestamp趾断,datetime 幾個的關系

  • Timestamp
    • ( java中的Timestamp ) 相當于 ( 數(shù)據(jù)庫中的datetime )
    • Timestamp.valueOf(String v) 將string轉(zhuǎn)成Timestamp
  • SimpleDateFormat
    • 主要用來格式化時間
    • new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 生成實例拒名,然后再調(diào)用實例上的方法
    @Test
    void testDate() {
        Date date = new Date(); // 獲取時間實例
        SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); // 生成實例
        String format = dateFormat.format(date); // 調(diào)用實例實例上的format()方法,返回一個字符串
        log.info("SimpleDateFormat: {}", format);
    }


(二) 多模塊配置 module

(2.1) 多模塊的優(yōu)點

  • 每個模塊具有 ( 高內(nèi)聚 ) 性芋酌,方便校驗增显,調(diào)試,測試

(2.2) 模塊的依賴關系

common 一般不依賴任何模塊脐帝,除非common封裝的方法涉及到其他模塊
mapper => 依賴 common
service => 依賴 common mapper
controller => 依賴 common service mapper
注意點:
1. 需要刪除 ( 父模塊的src ) 文件夾同云,因為父模塊不需要寫代碼
2. controller 模塊是需要建 ( srping-boot ) 項目
3. 除了controller模塊,其他模塊都是建 ( maven ) 項目

(2.3) idea 做相關設置

  • 字符編碼設置:ctrl + , => File Encodings => utf-8
  • 注解生效激活:compiler => annotation processors => Enable annotation processing

(2.4) 多模塊配置具體過程

(1) 父模塊
1.1 首先新建父模塊 ----------------------------------- 【 創(chuàng)建的類型為springboot項目 】
1.2 修改父模塊的 pom.xml堵腹,將 ( packaging ) 類型從jar改為pom炸站,即打包類型為pom
1.3 dependences 交給父模塊來打理
1.4 注意區(qū)分 ( dependencies ) 和 ( dependencyManagenment )
     - dependencyManagenment => dependencies => dependency
     - dependencyManagenment 只是聲明依賴,并不實際導入package疚顷,子模塊需要顯示的引入
1.5 創(chuàng)建好子模塊后旱易,父項目的pom.xml中會自動生成 ( modules ) 標簽,并顯示所有子模塊


(2) 子模塊
2.1 創(chuàng)建module - mapper service controller ---------- 【 創(chuàng)建類型事maven項目 】


(3) 模塊的依賴關系
      common 一般不依賴任何模塊腿堤,除非common封裝的方法涉及到其他模塊
      mapper => 依賴 common
      service => 依賴 common mapper
      controller => 依賴 common service mapper
   
   
(4) 具體配置
4.1在子模塊中的pom.xml中配置好模塊的依賴關系即可
4.2 所有模塊的 groupId 都是一樣的
4.3 controller
<dependencies>
    <!-- controller 依賴 service -->
    <dependency>
        <groupId>com.woow.wu7</groupId>
        <artifactId>service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
</dependencies>
image.png

image.png


(三) Mybatis-plus

(1) Mybatis-plus ( Mapper ) 的基本使用

(1.1) 安裝idea插件 - MyBatisX

  • command + , 選擇 plugins阀坏,搜索 MyBatisX 安裝
  • 好處就是點擊圖標能直接跳轉(zhuǎn)mapper和xml配置文件

(1.2) 添加 maven 依賴

  • 注意:Mybatis-plus 包中已經(jīng)包含了 mybatis 和 jdbc 的start包了,所以不需要再安裝這兩個包
    • 包含 mybatis-spring-boot-starter
    • 包含 spring-boot-starter-data-jdbc
  • application.yml 文件中通過 mybatis-plus: xxx 對其進行定制配置
    • mapperLocations: 自動配置好了
      • 默認值是:classpath*:/mapper/**/*.xml笆檀,表示在 resources/mapper
      • 所以sql映射文件忌堂,建議放在 resrouces/mapper 文件中
    • SqlSessionFactory:自動在容器中配置好了,底層是容器中的默認數(shù)據(jù)源
    • SqlSessionTemplate:自動在容器中配置好了
    • @Mapper 標注也會被自動掃描
      • 建議使用@MapperScan進行指定掃描的包误债,進行批量掃描浸船,就不用一個個@Mapper了
<!-- mybatis plus包含了 ( mybatis-spring-boot-starter ) 和 ( spring-boot-starter-data-jdbc ) -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>

(1.3) 配置 @MapperScan

  • 指定掃描的mapper包,就不用在一個個@Mapper了
  • @MapperScan注解的 ( 參數(shù) ) 是 ( mappe文件夾路徑引用 )
@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 指定mapper的目錄寝蹈,將自動掃描李命,則不用在每個類上都加@Mapper
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

(1.4) 準備一個bean對象即user類 - MybatisPlusUserBean

  • 注意注意注意:( 實體類名 ) 必須和 ( 數(shù)據(jù)庫表名 ) 保持一致,否則需要指定數(shù)據(jù)庫名稱
  • 這里實體名叫 MybatisPlusUserBean箫老,那么數(shù)據(jù)庫名就要叫 mybatis_plus_user_bean
  • @TableName 指定數(shù)據(jù)庫表名封字,默認情況下mp會將實體名首字母小寫,用_連接耍鬓,作為表名
@Data
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Component
@TableName("mybatis_plus_user_bean") 
// @TableName 
// 指定數(shù)據(jù)庫表名阔籽,默認情況下mp會將實體名首字母小寫,用_連接牲蜀,作為表名
// @TableName 是mybatis-plus中的注解
public class MybatisPlusUserBean {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    
    @TableField(exist = false) // mybatis-plus的注解笆制,表示該屬性在數(shù)據(jù)庫中不存在
    private String other;
}

(1.5) 編寫一個mapper - 繼承BaseMapper

  • 繼承 extends BaseMapper<bean對象> 就具有crud的能力,不用在手寫crud了
  • bean對象的命名需要和數(shù)據(jù)庫的表一致
  • 比如實體名叫 MybatisPlusUserBean涣达,那么數(shù)據(jù)庫名就要叫 mybatis_plus_user_bean
  • 可以不用再寫 @Mapper在辆,因為配置了 @MapperScan
@Mapper
public interface MybatisPlusUserMapper extends BaseMapper<MybatisPlusUserBean> {
}

(1.6) 準備好數(shù)據(jù)庫和user表

  • 1.注意注意注意:( 實體類名 ) 必須和 ( 數(shù)據(jù)庫表名 ) 保持一致
  • 2.也可以通過 @TableName 指定數(shù)據(jù)庫表名证薇,默認情況下mp會將實體名首字母小寫,用_連接匆篓,作為表名

(1.7) 測試是否已經(jīng)配置成功

@SpringBootTest
@Slf4j
public class MybatisPlusUserTest {

    @Autowired
    MybatisPlusUserMapper mybatisPlusUserMapper;

    // mapper相關測試
    // 查詢
    @Test
    void getUser() {
        MybatisPlusUserBean user = mybatisPlusUserMapper.selectById(1);
        log.info("用戶信息{}", user);
    }

    // mapper相關測試
    // 添加
    @Test
    void addUser() {
        MybatisPlusUserBean user = new MybatisPlusUserBean();
        long a = 11;
        MybatisPlusUserBean user2  = user.builder()
                .name("周杰倫2")
                .age(200)
                .email("woow.wu7@gmail.com")
                .id(a)
                .build();

        int status = mybatisPlusUserMapper.insert(user2);
        log.info("Mybatis-plus插入insert()方法的返回值{}", status);
    }

    // mapper相關測試
    // 刪除
    @Test
    void deleteUser() {
        int id = 11;
        int status = mybatisPlusUserMapper.deleteById(id);
    }

    // mapper相關測試
    // 更新
    @Test
    void editUser() {
        MybatisPlusUserBean user = new MybatisPlusUserBean();
        long userId = 11;
        MybatisPlusUserBean user2  = user.builder()
                .name("周杰倫13000")
                .age(3000)
                .email("woow.wu3000@gmail.com")
                .id(userId)
                .build();
        int status = mybatisPlusUserMapper.updateById(user2);
    }
}
  • mybatis-plus 的 mapper 查詢 selectById

    image.png

  • mybatis-plus 的 mapper 插入 insert

    image.png

  • mybatisx插件如下


    image.png

(2) Mybatis-plus ( Service ) 的基本使用

(2.1) 以上 1 步浑度,測試了extends BaseMapper,繼續(xù)測試 extends IService

  • ( mapper ) 是除了繼承mybatis-plus的 ( BaseMaper )
  • Interface接口 - ( interface ) 也可以繼承mybatis-plus的 ( IService )
  • Implements實現(xiàn)類 - (implements service) 繼承 ( ServiceImpl<mapper bean> )

(2.2) 編寫一個 Interface Service

MpIService - 是一個interface
-------

public interface MpIService extends IService<MybatisPlusUserBean> {
}

(2.3) 編寫一個實現(xiàn)類

MpIServiceImpl - 是一個實現(xiàn)類
------

@Service
public class MpIServiceImpl extends ServiceImpl<MybatisPlusUserMapper, MybatisPlusUserBean> implements MpIService {
}

-------
// extends ServiceImpl<MybatisPlusUserMapper, MybatisPlusUserBean>
  // - MybatisPlusUserMapper 是上面繼承了 BaseMapper 的 mapper
// MpIServiceImpl 除了繼承 ServiceImpl 外鸦概,還需要實現(xiàn)我們自己定義的 MpIService
  // - MpIService 需要繼承 IS而ver

(2.4) 測試

@SpringBootTest
@Slf4j
public class MpIServiceTest {

    @Autowired
    MpIService mpIService;

    @Test
    void mpIServiceTest() {
        List<MybatisPlusUserBean> data = mpIService.list();
        log.info("{}", data);
    }
}
image.png

(3) Mybatis-plus 開啟日志

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 開啟mybatis-plus日志


(四) springboot 單模塊項目打包和部署

(4.1) package 和 install 的區(qū)別

  • package 是簡單的打包
  • install 除了打包箩张,還會把這個打包好的包安裝到maven倉庫中
  • 注意:如果 ( 其他項目依賴a項目 ),則應該使用 ( install ) 來進行打包a項目

打包

(4.2.1) 單模塊打包過程

  • 如果springboot項目中有jsp頁面窗市,就只能打成war包先慷,沒有則可以達成jar包
  • 步驟 ( idea方式 )
    • 1.添加 srping boot 的打包插件 spring-boot-maven-plugin
    <!-- maven插件 -->
    <plugins>
      <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
    
    • 2.在idea中關閉項目,清楚緩存谨设,然后選擇 Lifecycle=> clean compile package熟掂,package打包說明沒有依賴關系,不會打包后不會放在maven倉庫中
    • 3.打完包扎拣,會生成 target 文件夾赴肚,里面就會有 .jar
  • 步驟( 使用命令的方式打包,不用idea來操作 )
1. mvn -Dmaven.test.skip -U clean package
-D 是指定參數(shù)的意思
-D maven.test.skip 表示跳過test檢查
-U 表示強制去遠程更新插件或依賴
clean package 表示清楚target然后再打包
這個命令能執(zhí)行的前提是需要插件:Spring-boot-maven-plugin

(4.2.2) 多模塊打包過程

(1) 將父模塊的pom.xml文件中的build標簽的所有內(nèi)容復制到controller模塊二蓝,因為controller其實已經(jīng)變成了主模塊
(2) 想build標簽中添加 configuration => mainClass => application主類的引用路徑
(3) 最終的controller模塊中的build標簽內(nèi)容如下
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.woow.wu7.Application</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
(4) 然后在利用idea或者mvn命令來打包即可
image.png

(4.3) 如果打包過程報錯:提示test沒通過誉券,則可以設置忽略測試

  • 有兩種方式跳過test進行打包
    • 1.在 pom.xml 中做如下配置
    <properties>
       <skipTests>true</skipTests>
    </properties> 
    
    • 2.添加plugin maven-surefire-plugin
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-surefire-plugin</artifactId>
       <!-- 打包時跳過檢查 -->
       <!-- surefire 是萬全,可靠的意思 -->
       <configuration>
          <skip>true</skip>
       </configuration>
    </plugin>
    

部署jar包

(4.4) 使用命令運行 jar 包

結尾是否有 &
---

(1) java -jar 7-react-admin-java-0.0.1-SNAPSHOT.jar
// ssh通過 ( ctrl+c ) 則可以終止java服務
// 缺點:當退出命令行工具后刊愚,java服務將不在運行


(2) java -jar 7-react-admin-java-0.0.1-SNAPSHOT.jar &
// 1. 在尾部加上 ( & ) 表示該命令在后臺執(zhí)行踊跟,ssh通過 ( ctrl+c ) 則無法終止java服務
// 2. 只有 ( 關閉命令窗口 ) 才會終止java程序
指定環(huán)境
---

(3) java -jar -Dspring.profiles.active=production target/7-react-admin-java-0.0.1-SNAPSHOT.jar
// -Dspring.profiles.active=production 指定環(huán)境變量是生產(chǎn)環(huán)境
// 則需要在 src/main/resources/application-production.properties 文件來配置生產(chǎn)環(huán)境中的配置
// -D 表示指定參數(shù)

(4.5) 持久化

  • nohup 和 & 的區(qū)別
    • 不加& 當ctrl+c后就會終止java程序執(zhí)行
    • & 后臺運行,但是 ( 關閉了終端或者ssh窗口 ) 就還是會終止java程序執(zhí)行
    • nohup + & ( 關閉終端或窗口 ) 仍然運行鸥诽,即持久化操作
nohup java -jar -Dspring.profiles.active=production target/7-react-admin-java-0.0.1-SNAPSHOT.jar >temp.txt &

(4.6) 查看已部署的java項目的后臺運行進程

  • ps -ef | grep java > a.txt
    • 檢查java程序是否存在商玫,可以看到 PID PPID CMD等信息,即可以根據(jù)PID關閉相關進程牡借,比如java
    • ps 將某個進程顯示出來
      • -e 顯示所有進程
      • -f 全格式
    • grep 表示查找
    • ps -ef | grep java > a.txt 表示將查到的java后臺進程結果寫進 a.txt 文件中
      image.png

(4.7) 殺掉java進程拳昌,終止java程序在后臺運行

  • kill 進程號
  • 進程號可以通過 ps -ef | grep java 來查看
  • kill 76619
image.png

部署war包

1. 如果是多模塊,并且想用war包的方式進行部署钠龙,那么
2. 首先需要將controller模塊中的pom.xml中的 ( packaging ) 改成 ( war )
3. 然后需要在 ( src/main ) 中新建 ( webapp/WEB-INF/web.xml ) 文件
4. 然后輸入命令打包即可
image.png

資料

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炬藤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碴里,更是在濱河造成了極大的恐慌沈矿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咬腋,死亡現(xiàn)場離奇詭異羹膳,居然都是意外死亡,警方通過查閱死者的電腦和手機根竿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門陵像,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湃缎,“玉大人,你說我怎么就攤上這事蠢壹。” “怎么了九巡?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵图贸,是天一觀的道長。 經(jīng)常有香客問我冕广,道長疏日,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任撒汉,我火速辦了婚禮沟优,結果婚禮上,老公的妹妹穿的比我還像新娘睬辐。我一直安慰自己挠阁,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布溯饵。 她就那樣靜靜地躺著侵俗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丰刊。 梳的紋絲不亂的頭發(fā)上隘谣,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音啄巧,去河邊找鬼寻歧。 笑死,一個胖子當著我的面吹牛秩仆,可吹牛的內(nèi)容都是我干的码泛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼逗概,長吁一口氣:“原來是場噩夢啊……” “哼弟晚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起逾苫,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤卿城,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后铅搓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑟押,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年星掰,在試婚紗的時候發(fā)現(xiàn)自己被綠了多望。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫩舟。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怀偷,靈堂內(nèi)的尸體忽然破棺而出家厌,到底是詐尸還是另有隱情,我是刑警寧澤椎工,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布饭于,位于F島的核電站,受9級特大地震影響维蒙,放射性物質(zhì)發(fā)生泄漏掰吕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一颅痊、第九天 我趴在偏房一處隱蔽的房頂上張望殖熟。 院中可真熱鬧,春花似錦斑响、人聲如沸菱属。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽照皆。三九已至,卻和暖如春沸停,著一層夾襖步出監(jiān)牢的瞬間膜毁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工愤钾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘟滨,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓能颁,卻偏偏與公主長得像杂瘸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伙菊,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容