如何快速搭建springboot項目?


1.情景展示

在工作中,公司通常都會有自己已經搭建好的框架來供我們使用,一般情況下,是不需要自己搭建框架的;

但是,工作之余,或者自己想搞搞小項目供自己研究等,如何快速搭建一個框架呢?

2.場景分析

對於框架,我們不需要知道底層代碼是如何實現的,只需要知道如何更好地為我們提供方便就可以了,用框架的目的是為了便捷開發,如果是為了研究框架的話,不在本文的范圍內;

目前最方便的java開發框架是:springboot,就簡單理解為對springMVC的進一步整合即可;

下面,將以springboot為例,如何快速完成框架的搭建。

3.解決方案

通過spring官網,完成框架的搭建。

springboot框架搭建官網:https://start.spring.io/

選擇項目類型,對項目名稱,項目組等信息進行修改;

添加,項目所需jar包依賴,一般需要有以下4個:

點擊“生成”按鈕,即可自動將項目下載到本地。

打開該文件,對其進行解壓並將其拷貝到開發工具的工作空間下,比如:idea;

打開idea--》File--》Open;

找到剛才的項目路徑,打開該項目;

如果打開項目目錄結構不能夠完全展示的話,那就是idea的bug,關閉idea重新啟動試試。

由於現在項目使用的版本號是jdk11,如果idea里面沒有配置jdk11,而且自己並不想重新配置的話,那就只能修改pom.xml當中java版本啦;

等下面的進度條下載完對應的插件即可。

如果只是搭建springMVC框架,也可以在spring官網快速完成:https://spring.io/

4.擴展

修改配置文件

springboot默認配置文件是:src/main/resources/application.properties。

配置數據源

找到src/main/resources下的application.properties文件,這個是項目的核心配置文件;

如果你習慣了使用yml文件,可以對其進行重命名。

添加數據庫配置

數據庫連接池配置

查看代碼
####spring配置####
spring:
  ###數據庫配置
  datasource:
    ##要使用的連接池實現的全稱
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      #最大連接數
      max-active: 5000
      #初始化大小
      initial-size: 10
      #最小連接數
      min-idle: 1
      #獲取連接等待超時時間(單位:毫秒)
      max-wait: 60000
      #間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
      time-between-eviction-runs-millis: 60000
      #一個連接在池中最小生存的時間,單位是毫秒
      min-evictable-idle-time-millis: 30000
      #啟用游標緩存
      pool-prepared-statements: true
      #最大可打開的游標數
      max-pool-prepared-statement-per-connection-size: 20
      #配置監控統計攔截的filters,去掉后監控界面SQL無法進行統計,'wall'用於防火牆
      #值:config,stat,wall,log4j,
      filters: stat
      #檢驗連接是否有效的查詢語句。如果數據庫Driver支持ping()方法,則優先使用ping()方法進行檢查,否則使用validationQuery查詢進行檢查。(Oracle jdbc Driver目前不支持ping方法)
      validation-query: SELECT 1 FROM DUAL
      #關閉自動重連
      connection-error-retry-attempts: 0
      break-after-acquire-failure: true

所需依賴:

查看代碼
<!--數據庫連接池-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>

數據源配置

查看代碼
####spring配置####
####開發環境數據源配置
spring:
  ###數據庫配置
  datasource:
    ##數據庫地址(默認端口號:3306)
    url: jdbc:mysql://192.168.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
    ##用戶名
    username: root
    ##密碼
    password: 123456
    ##JDBC驅動程序的全稱
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis配置

查看代碼
####mybatis配置####
mybatis:
  ###mybatis配置文件
  #  config-location: classpath:myBatis-config.xml
  ###mapper映射xml文件所在路徑(**代表文件夾)
  mapper-locations: classpath:mapper/**/*Mapper.xml
  ###pojo所在包,使用該注解,在mapper.xml用實體類接收時,可以不使用pojo全路徑-替換
  type-aliases-package: com.example.upload.model
  configuration:
    ##如果查詢語句中某些字段值是null的,則這個字段就無法返回,設置為true則可以
    call-setters-on-nulls: true

日志配置

查看代碼
####日志配置
logging:
  ###日志存放路徑:log/sys.log
  file:
    ##路徑(不同環境配置不同日志輸出目錄)(既可以使用相對路徑,也可以使用絕對路徑)
    ##部署到tomcat上:tomcat_home/logs/upload
    ##部署到java上:project_workspace/logs/upload
    path: ../logs/upload
    ##文件名
    name: sys
  ###日志級別:FATAL > ERROR > WARN > INFO > DEBUG > TRACE
  level:
    ##日志級別
    root: DEBUG
  ###控制台輸出格式
  pattern:
    ##在yml中,這里需要加單引號'
    console: '%d [%t] %p (%file:%line\) - %m%n'

關閉控制台輸出:CONDITIONS EVALUATION REPORT日志的兩種方式

方式一:將日志級別改為INFO;

因為CONDITIONS EVALUATION REPORT日志的級別為DEBUG。

方式二:主動關閉該日志顯示。

查看代碼
###關閉CONDITIONS EVALUATION REPORT日志
devtools:
  restart:
    log-condition-evaluation-delta: false

還需要配置logback-spring.xml

查看代碼

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--部署到tomcat上,日志不生效的原因是:
    logback.xml加載早於application.yml,所以,如果你在logback.xml使用了變量時,而恰好這個變量是寫在application.properties時,那么就會獲取不到。
    需將日志文件重命名為logback-spring.xml就可以解決啦-->

    <!--定義變量值的標簽:name的值是變量的名稱,通過${}來獲取變量,source對應yml中的屬性-->
    <!-- 和日志配置文件作映射(動態配置,從yml文件中獲取這些屬性) -->
    <!--使用<springProperty>,才可使用application.properties(或application.yml)中的值-->
    <!--注意:source對應的是yml配置文件中的屬性,yml里對應的屬性值必須是常量,不能是動態獲取的,否則這里沒法取到實際的值-->
    <springProperty scope="context" name="log_file_path" source="logging.file.path"/>
    <springProperty scope="context" name="log_file_name" source="logging.file.name"/>
    <springProperty scope="context" name="log_level" source="logging.level.root"/>
    <springProperty scope="context" name="log_pattern_console" source="logging.pattern.console"/>

    <!--輸出到控制台:控制台輸出策略-->
    <!-- %m輸出的信息,%p日志級別,%t線程名,%d日期,%c類的全名,%i索引【從數字0開始遞增】,%n換行符,, -->
    <!-- appender是configuration的子節點,是負責寫日志的組件。 -->
    <!-- ConsoleAppender:把日志輸出到控制台 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log_pattern_console}</pattern>
            <!--<pattern>%d [%t] %p (%file:%line\) - %m%n</pattern>-->
            <!-- 不要使用UTF-8,否則以jar包運行該項目,springboot內置tomcat日志輸出使用的是GBK,所以會導致中文亂碼
             TOMCAT_HOME/conf/logging.properties文件里的java.util.logging.ConsoleHandler.encoding = GBK-->
            <!--控制台設置日志輸出格式UTF-8/GBK 如果不設置,則獲取默認格式-->
            <!--<charset>UTF-8</charset>-->
        </encoder>
    </appender>

    <!--輸出到文件:文件輸出策略-->
    <!-- RollingFileAppender:滾動記錄文件(用於切分日志文件),先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件 -->
    <!-- 以下的大概意思是:1.先按日期存日志,日期變了,將前一天的日志文件名重命名為XXX%日期%索引,新的日志仍然是sys.log -->
    <!--             2.如果日期沒有發生變化,但是當前日志的文件大小超過1KB時,對當前日志進行分割 重命名-->
    <appender name="file"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 正在記錄的日志文件的路徑及文件名 -->
        <file>${log_file_path}/${log_file_name}.log</file>
        <!--<file>log/sys.log</file>-->
        <!-- rollingPolicy:當發生滾動時,決定 RollingFileAppender 的行為,涉及文件移動和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責觸發滾動 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 活動文件的名字會根據fileNamePattern的值,每隔一段時間改變一次 -->
            <!-- 文件名:log/sys.2017-12-05.0.log -->
            <fileNamePattern>${log_file_path}/sys.%d.%i.log</fileNamePattern>
            <!--<fileNamePattern>${logPath}/xxx.%d{yyyy-MM-dd}.log.zip</fileNamePattern>-->
            <!-- 每產生一個日志文件,該日志文件的保存期限為10天 -->
            <maxHistory>15</maxHistory>
            <!--用來指定日志文件的上限大小,例如設置為1GB的話,那么到了這個值,就會刪除舊的日志-->
            <totalSizeCap>2GB</totalSizeCap>
            <!--項目重啟清空之前的日志文件-->
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 單個日志文件的最大容量,超過就會產生新的文件,默認值是10MB -->
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <!-- pattern節點,用來設置日志的輸入格式 -->
            <!--另外:部署到tomcat上,會自動將錯誤堆棧輸出到日志文件中,但是,使用springboot啟動,則不會將錯誤堆棧寫到文件中-->
            <pattern>
                %d [%t] %p (%file:%line\)- %m%n
            </pattern>
            <!-- 記錄日志的編碼 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 設置日志對象的日志級別,默認值DEBUG,忽略大小寫 -->
    <root level="${log_level}">
        <!--控制台(必須定義日志級別,控制台沒有日志輸出)-->
        <appender-ref ref="console"/>
        <!--日志輸出文件(必須定義日志級別,不然日志無法寫到文件中)-->
        <appender-ref ref="file"/>
    </root>

    <!--<logger>用來設置某一個包或者具體的某一個類的日志打印級別、以及指定<appender>-->
    <!-- 指定項目中某個包,當有日志操作行為時的日志記錄級別 -->
    <!-- com.appley為根包,也就是只要是發生在這個根包下面的所有日志操作行為的權限都是DEBUG -->
    <!-- 級別依次為【從高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
    <!--<logger name="com.xyh.bill.s.service" level="DEBUG" additivity="false">
        <appender-ref ref="syslog" />
    </logger>-->

    <!--去掉spring boot的ONDITIONS EVALUATION REPORT-->
    <!--addtivity:是否向上級logger傳遞打印信息。默認是true,如果不設置的話:就會打印兩次,因為打印信息向上級傳遞,logger本身打印一次,root接到后又打印一次-->
    <logger name="org.springframework.boot.autoconfigure" level="ERROR" additivity="false">
        <appender-ref ref="console" />
    </logger>
    <!--mybatis打印執行結果集(解決只打印SQL不打印結果集的問題)-->
    <!--Mybatis中,打印SQL語句的日志級別是DEBUG,而打印SQL執行結果集的日志級別是TRACE-->
    <!--mapper類所在包名-->
    <logger name="com.example.upload.dao" level="TRACE" additivity="false">
        <appender-ref ref="console" />
    </logger>


</configuration>

使用springboot啟動項目后,會在workspace/logs/upload目錄下生成日志。

說明:logback-spring.xml需要與application.xml平級。

如果不配置logback-spring.xml並不影響項目的正常運行,日志也會存在;

但是,我們會喪失對於日志的管理,沒有了對日志的控制權,相當於項目沒有了靈魂烙印。

修改tomcat端口號

####spring內置Tomcat配置####
####只有使用springboot內置的Tomcat啟動項目時,才會生效
server:
  ###指定Tomcat端口號
  port: 8080

修改tomcat請求地址的字符集

查看代碼
####spring內置Tomcat配置####
####只有使用springboot內置的Tomcat啟動項目時,才會生效
server:
  ###tomcat配置
  tomcat:
    #URI的解碼字符集,默認為UTF-8
    uri-encoding: UTF-8
    #啟動超時時間限制(3秒)
    connection-timeout: 3000ms

修改項目的訪問入口

查看代碼
####spring內置Tomcat配置####
####只有使用springboot內置的Tomcat啟動項目時,才會生效
server:
  ###tomcat的本質是servlet
  servlet:
    ##指定項目的訪問名稱(不配置的話默認為:/,也就是沒有名字;配置的話必須以'/'開頭,且不能以'/'結尾)
    context-path: /upload

修改請求與響應數據的字符集

查看代碼
####spring內置Tomcat配置####
####只有使用springboot內置的Tomcat啟動項目時,才會生效
server:
  ###tomcat的本質是servlet
  servlet:
    ##請求與響應字符集
    encoding:
      charset: utf-8
      enabled: true
      force: true

文件上傳相關配置

查看代碼
####spring配置####
####開發環境數據源配置
spring:
  ###文件上傳大小限制
  servlet:
    multipart:
      #是否支持批量上傳(默認值 true)
      enabled: true
      #上傳文件最大為 1M(默認值 1M)
      max-file-size: 10MB
      #上傳請求最大為 10M(默認值 10M)
      max-request-size: 10MB
      #文件大小閾值,當大於這個閾值時將寫入到磁盤,否則存在內存中(默認值0,即:直接將文件寫入磁盤)
      file-size-threshold: 0
      #判斷是否要延遲解析文件(默認值false)
      resolve-lazily: false
      #存放上傳文件的臨時目錄
      location:

添加歡迎頁

springboot在啟動的時候,會默認加載static目錄下所有的資源,並將static/index.html當做項目的歡迎頁。

我們來到src/main/resources/static目錄下,新建一個html文件,並將名稱定為index;

啟動項目

通過瀏覽器即可訪問到該界面(如果沒有配置歡迎頁的話,訪問結果為404)。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM