新項目如何技術選型以及落地實現

  • 2021 年 12 月 22 日
  • 筆記
 

目錄

一、技術選型概述

二、確定Spring家族依賴的版本號

1.springcloud

2.spring cloud alibaba

3.springboot

三、確定資料庫資訊

1.MySQL相關

1.1  官網推薦,兼容性好

1.2  Maven使用頻率較高:

2.資料庫連接池

2.1  Druid與C3P0的比較

2.2  druid依賴的版本使用:1.2.6

四、搭建整個工程

1.父項目的pom依賴

2.子模組的依賴

3.部分目錄結構 

五、其他依賴

推薦閱讀

如果本篇部落格對您有一定的幫助,大家記得留言+點贊+收藏哦。


一、技術選型概述

技術選型的基本原則:求穩,適當求新。

根據業務需求,選用B/S、微服務架構,使用Java作為後端開發語言,Vue作為前端開發。

項目管理工具使用禪道,內容管理工具使用Confluence,程式碼協同工具使用Git,

資料庫使用MySQL,快取使用Redis,集成開發環境使用IDEA。

之前用過的,建議依舊沿用。

以上內容只是根據業務確定。


二、確定Spring家族依賴的版本號

SpringBoot、SpringCloud、SpringCloud Alibaba皆選用官網最穩定,最新版本。

1.springcloud

官網地址:Spring Cloud

image.png​

2.spring cloud alibaba

官網地址:Spring Cloud Alibaba

image.png​

3.springboot

官網地址:Spring Boot

image.png​

 

SpringBoot選用2.3.12.RELEASE的原因是:SpringCloud Hoxton.SR12版本推薦使用 2.3.12.RELEASE版本。


三、確定資料庫資訊

1.MySQL相關

MySQL伺服器的版本是5.6(之前安裝的繼續沿用)

mysql依賴的版本使用:8.0.16

1.1  官網推薦,兼容性好

MySQL :: MySQL Connector/J 5.1 Developer Guide :: 2 Connector/J Versions, and the MySQL and Java Versions They Require

MySQL :: MySQL Connector/J 8.0 Developer Guide :: 1 Overview of MySQL Connector/J

以下是 Connector/J 8.0的一些兼容性資訊:

JDBC版本:Connector/J 8.0實現JDBC 4.2。當Connector/J 8.0與JDBC更高版本的庫一起工作時,對於僅由JDBC 4.3和更高版本支援的方法調用,它會返回SQLFeatureNotSupportedException。

MySQL伺服器版本:Connector/J 8.0支援MySQL 5.6、5.7和8.0。

JRE版本:Connector/J 8.0支援JRE 8或更高版本。

編譯需要JDK:編譯Connector/J 8.0需要JDK 8.0或更高版本。此外,在連接到MySQL伺服器時,可能需要訂製JSSE提供程式來使用一些更高版本的TLS和密碼套件

 

強烈建議將 MySQL Connector/J 8.0 與 MySQL Server 8.0、5.7 和 5.6 一起使用。請升級到 MySQL Connector/J 8.0。

image.png​

1.2  Maven使用頻率較高:

image.png​

 

2.資料庫連接池

2.1  Druid與C3P0的比較

Java-資料庫連接池技術_小小張自由—>張有博-CSDN部落格_java-資料庫連接池技術

2.2  druid依賴的版本使用:1.2.6

druid與druid-spring-boot-starter 的區別

作用是一樣的,都是連接池提供連接,裡邊的配置參數都是一樣的;

druid-spring-boot-starter只是在druid基礎上進行了一次封裝,專門用來整合spring-boot項目;

如果springboot項目想使用druid也是可以的,但是需要手動編寫配置類並注入到bean中,並載入對應的配置參數;

但是不建議,明明有現成封裝好的jar,就直接使用就好了!!!

四、搭建整個工程

1.父項目的pom依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="//maven.apache.org/POM/4.0.0"
         xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tfjybj</groupId>
    <artifactId>daily</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <modules>
        <module>daily-statistics</module>
    </modules>

    <!-- 統一管理jar包版本 -->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spring.boot.version>2.3.12.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR12</spring.cloud.version>
        <spring.cloud.alibaba.version>2.1.2.RELEASE</spring.cloud.alibaba.version>
        <mysql.version>8.0.16</mysql.version>
        <druid.version>1.2.6</druid.version>
        <swagger.version>2.9.2</swagger.version>
        <lombok.version>1.18.8</lombok.version>
        <xxl-job.version>2.2.0</xxl-job.version>
        <fastjson.version>1.2.58</fastjson.version>
    </properties>




    <!-- 子模組繼承之後,提供作用:鎖定版本+子modlue不用寫groupId和version  -->
    <!--在父工程pom文件中聲明依賴,但不引入,父項目聲明,供子項目按需引入-->
    <dependencyManagement>
        <dependencies>

            <!--spring boot,spring cloud,spring cloud alibaba-->
            <!--選用官網穩定的版本-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--swagger生成API文檔-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>${swagger.version}</version>
            </dependency>
            <!--fastjson的依賴-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>
            <!--lombok的依賴-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>



        </dependencies>
    </dependencyManagement>

    <!--所有聲明在父項目 dependencies 中的依賴都會自動引入,並默認被所有子項目繼承-->
    <!--即使在子項目中不引入該依賴,那麼子項目依然會從父項目中繼承該依賴項。-->
    <dependencies>


    </dependencies>

</project>

2.子模組的依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="//maven.apache.org/POM/4.0.0"
         xmlns:xsi="//www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>daily</artifactId>
        <groupId>com.tfjybj</groupId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>daily-statistics</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>

        <!-- nacos服務註冊/發現-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--nacos配置中心來做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>


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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--重複依賴,但是沒有找到在哪裡-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-jdbc</artifactId>-->
<!--        </dependency>-->

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

        <!--mysql:官網推薦 Maven使用頻率較高-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>

        <!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.6</version>
        </dependency>

         <!--swagger生成API文檔-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>

        <!--lombok的依賴-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--json格式轉換-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-job-core</artifactId>
            <version>2.0.2</version>
        </dependency>


    </dependencies>

    <!--用於項目打包,打包需要的插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.12.RELEASE</version>
            </plugin>
        </plugins>
    </build>


</project>

2.1 nacos中的部分配置

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: jdbc:mysql://mysql.xxx.tech/daily_prod
      username: roots
      password: roots
      filter:
        config:
          enabled: true #資料庫過濾器是否開啟
      connect-properties:
        druid.statmergeSql: true  #打開mergeSql功能
        druid.stat.slowSqlMillis: 5000  #慢SQL記錄
        config.decrypt: false #是否解密
        config.decrypt.key: ${custom.publicKey} #解密的公鑰
  jpa:
    hibernate:
      #      實體類發生改變,數據表會更新
      ddl-auto: update
      #      操作實體對象的時候,會跟我們生成sql語句: false 不生成sql語句:
      show-sql: true

2.2  Bootstrap中部分的配置

server:
  port: 9000

spring:
  cloud:
    nacos:
      discovery:
        server-addr: nacos.xxx.tech:80
        namespace: Daily-dev
      config:
        server-addr: nacos.xxx.tech:80
        namespace: Daily
        prefix: statistics
        file-extension: yml
  application:
    name: Daily-statistics

xxl:
  job:
    admin:
      addresses: //xxljob.xxx.tech:8081/job-admin-dev  #xxljob調度中心部署  例如://127.0.0.1:8080/xxl-job-admin
    executor:
      appname: daily-test #xxljob配置的執行器名稱,
      ip:             #執行器IP,默認為空表示自動獲取IP
      port: 9998 #xxljob配置的埠號,默認為9999
      logpath: /data/xxl-job/jobhandler  #執行器運行日誌文件存儲磁碟路徑
      logretentiondays: -1  #調度中心日誌表數據保存天數,過期日誌自動清理;限制大於等於7時生效,否則, 如-1,關閉自動清理功能
    accessToken: #調度中心通訊TOKEN [選填]:非空時啟用


logging:
  level:
    com.alibaba: warn

3.部分目錄結構 

​

 

五、其他依賴

其他依賴的版本號:沒有仔細研究,使用我們其他項目中常用的。其實也可以直接去Maven官網上找。//mvnrepository.com/

或者去github社區看看活躍度。沒活躍度的就別用了,容易出錯,出錯不易解決。

推薦閱讀

使用到了nacos做註冊中心,配置中心,配置過程請見部落格:SpringBoot項目集成nacos,並啟動報錯Failed to configure a DataSource: 『url『 attribute is not speci_小小張自由—>張有博-CSDN部落格_springboot集成nacos啟動報錯

使用到了xxljob管理定時任務,配置過程請見部落格:SpringBoot項目集成xxljob全紀錄(圖文詳解)_小小張自由—>張有博-CSDN部落格

使用到了sonarqube檢查程式碼品質,配置過程請見部落格:配置sonarqube的全過程_小小張自由—>張有博-CSDN部落格_sonarqube使用方法

對異常進行了統一處理,配置過程請見部落格:Spring Boot 統一處理全局異常_小小張自由—>張有博-CSDN部落格

通過AOP實現全局日誌列印,配置過程請見部落格:

通過AOP實現全局日誌列印_小小張自由—>張有博-CSDN部落格

如果本篇部落格對您有一定的幫助,大家記得留言+點贊+收藏哦。

 

 

 

 

 


​

Tags: