SpringBoot學習day1-SpringBoot的簡介與搭建

  • springboot
    • 回顧spring
    • springboot
    • springboot搭建(新聞為例)
    • springboot中的配置文件
    • spring集成jdbc,mybatis,阿里巴巴數據源
    • **SpringBoot 集成日志功能**(了解)
      • 常用日志組件
      • 日志級別
    • springboot統一異常處理

springboot

回顧spring

spring是一個輕量級的IOC和AOP的一站式框架,為簡化企業級應用開發而生.

優點:

? 輕量級

? IOC

? AOP

解耦 (代碼之間的耦合度降低了, 例如IOC,由框架創建管理對象, AOP可以將業務代碼和非業務代碼分離)

一站式 (數據訪問層 數據連接對象管理,mybatis,事務), 對web層的Servlet進行封裝

開源

很方便的集成其他的框架

缺點:

1.配置是重量級的,而且大量是模板化配置

    <!--屬于很啰嗦的模板化配置--><!--開啟aop自動代理--><aop:aspectj-autoproxy></aop:aspectj-autoproxy><!-- 開啟注解事務管理 --><tx:annotation-driven transaction-manager="transactionManager"/><!--開啟web層的注解--><mvc:annotation-driven></mvc:annotation-driven>

2.項目中需要導入很多相關的依賴坐標(例如 json組件, 跨域過濾器…)

springboot

springboot是在spring的基礎上,對spring應用的搭建進行簡化,基于約定大于配置的思想(大家公認的做法,那么框架也就默認把一些功能直接實現了,例如我們現在都用注解開發),可以創建一個企業級應用程序, 內嵌服務器(tomcat),有量大核心功能: 起步依賴: 當我們使用spring基本的依賴時, 自動就會將相關的依賴導入進來。自動配置: spring啟動時,可以根據我們項目中配置的相關依賴,自動加載配置.

? Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

? Wetake an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration

springboot搭建(新聞為例)

1.創建一個普通的maven項目

image-20250610140249670

2.配置 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><groupId>org.example</groupId><artifactId>SpringBoot</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!--指定 jdk 版本--><java.version>1.8</java.version></properties><!--依賴的父級工程--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.6</version><relativePath/></parent><!--添加基本的 springweb 依賴--><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!--打包插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.6.6</version></plugin></plugins></build></project>  

創建啟動類NewsApplication

image-20250610170144738

package org.example;import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
@SpringBootApplicationpublic class NewsApplication {public static void main(String[] args) {SpringApplication.run(NewsApplication.class);}
}

3.創建自定義的處理器(web包)

@RestController
@RequestMapping(path = "/loginCtl")
public class LoginController {@RequestMapping(path = "/login")public String login(){System.out.println("aaaaaaaaaaaaa");return "success";}
}

啟動mian

image-20250610170401963

啟動成功!!!

tips:可以在Ascii藝術字實現個性化Spring Boot啟動banner圖案,輕松修改更換banner.txt文件內容,收集了豐富的banner藝術字和圖,并且支持中文banner下載,讓你的banner好玩兒更有意思。-bootschool.net網站下載啟動時候的圖案

image-20250610171938430

4.訪問

? ip:端口/處理地址/方法地址

springboot中的配置文件

springboot中的配置文件,嚴格意義上不是配置文件, 是用來存儲配置參數的文件(里面放的是參數值).

配置文件有兩種格式:

  1. 屬性文件 .properties

    image-20250610170846629

    鍵 = 值
    server.port=8089
    spring.datasource.driver-class-name=
    spring.datasource.url=
    spring.activemq.password=
    spring.datasource.username=
    

2.yml

#配置服務器端口
server:port: 8088spring:datasource:driver-class-name:url:username:password:

spring集成jdbc,mybatis,阿里巴巴數據源

1.導入依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency><!--mysql-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version>
</dependency><!-- 阿里巴巴數據源 -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version>
</dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version>
</dependency>

2.application.yml配置文件(在resource文件夾內)

# 端口號
server:port: 8080
# 數據庫配置
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/spring_demo?serverTimezone=Asia/Shanghaiusername: rootpassword: root# 使用阿里巴巴的druid連接池type: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 5min-idle: 5max-active: 20max-wait: 60000
# mybatis配置
mybatis:# 掃描mapper包type-aliases-package: org.example.model# mapper.xml文件位置mapper-locations: classpath:mapper/*Mapper.xml# 加載全局配置文件configuration:# 駝峰命名map-underscore-to-camel-case: true# 自動加載mapper.xmlcache-enabled: true# 打印sql語句log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

對啟動類進行配置@MapperScan("org.example.dao") // This line is used to scan the DAO package for SQL mappers

package org.example;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;// This is the main class of the News Application
@SpringBootApplication
@MapperScan("org.example.dao") // This line is used to scan the DAO package for SQL mapperspublic class NewsApplication {public static void main(String[] args) {SpringApplication.run(NewsApplication.class);}
}

3.創建服務類

package org.example.service;import org.example.dao.LoginDao;
import org.example.model.Admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
// 這個注解表示這是一個服務類,并且在事務中進行操作,如果出現異常,則回滾事務
@Transactional(rollbackFor = Exception.class)
public class LoginService {@AutowiredLoginDao loginDao;public Admin login(Admin admin) {return loginDao.login(admin);}
}

編寫LoginController類

package org.example.web;import org.example.model.Admin;
import org.example.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/loginCtl")
public class LoginController {@AutowiredLoginService loginService;@RequestMapping(path = "/login")public Admin login(@RequestBody Admin admin){Admin admin1 = loginService.login(admin);System.out.println("aaaaaaaaaaaaa");return admin1;}}

使用ApiPost測試

image-20250610181215092

image-20250610181314015

成功!!

最終文件結構

image-20250610181349786

SpringBoot 集成日志功能(了解)

日志?

日志是程序中重要組成部分,可以監測程序運行軌跡, 記錄參數值的變化.尤其是生產環境中非常必要, 通過日志文件可以快速的定位到問題.

什么時候使用日志

答:實際生產環境

常用日志組件

  • slf4j(Simple Logging Facade for Java)
  • commons-logging
  • Log4J
  • Log4J2
  • Logback
  • JUL(Java Utils Logging)

日志級別

從低到高:debug<info<warn<error

logging:level:org.example: infofile:name: D:/log/log.log#類里面配置Logger對象   private static Logger logger = LoggerFactory.getLogger(LoginController.class);logger.debug("input account:{},paasord:{}",admin.getAccount(),admin.getPassword());
logger.info("input account:{},paasord:{}",admin.getAccount(),admin.getPassword());
logger.warn("input account:{},paasord:{}",admin.getAccount(),admin.getPassword());
logger.error("input account:{},paasord:{}",admin.getAccount(),admin.getPassword());

保存位置如下

image-20250611170438969

在LoginController添加Logger對象

package org.example.web;import org.example.model.Admin;
import org.example.service.LoginService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/loginCtl")
public class LoginController {private static Logger logger = LoggerFactory.getLogger(LoginController.class);@AutowiredLoginService loginService;@RequestMapping(path = "/login")public Admin login(@RequestBody Admin admin) {logger.debug("input account:{},paasord:{}", admin.getAccount(), admin.getPassword());logger.info("input account:{},paasord:{}",admin.getAccount(),admin.getPassword());logger.warn("input account:{},paasord:{}",admin.getAccount(),admin.getPassword());logger.error("input account:{},paasord:{}",admin.getAccount(),admin.getPassword());/*@RequestBody 作用是將請求體中的json數據綁定到Admin對象中*/Admin admin1 = loginService.login(admin);System.out.println("aaaaaaaaaaaaa");return admin1;}}

項目中統一異常打印

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
package org.example.util;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;@Component
@Aspect
public class LogAspect {private static Logger logger = LoggerFactory.getLogger(LogAspect.class);@Before("execution(public * org.example.web.*.*(..))")public void savelog(JoinPoint joinPoint) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 記錄下請求內容logger.info("HTTP_METHOD :{} ", request.getMethod());logger.info("IP : {}", request.getRemoteAddr());//客戶端 ipObject[] objs = joinPoint.getArgs(); //獲取方法參數logger.info(Arrays.toString(objs));}
}

image-20250611170400681

springboot統一異常處理

/*全局統一的異常處理類*/
@RestControllerAdvice
public class GlobalExceptionHandler {private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);/*** 異常處理*/@ExceptionHandler(Exception.class)public Result globalException(Exception e) {Result commonResult = new Result(500,"系統忙:"+e.getMessage(),null);logger.info("Exception : "+e.getMessage());//向日志文件打印信息return commonResult;//向前端用戶響應信息}
}

統一日志打印,統一異常處理都是AOP的實際使用場景, spring中的事務管理也是AOP的使用場景

到此,后端最基本的功能搭建完成.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86657.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【牛客小白月賽117】E題——種類數小結

1 初步想法 1.1 前置知識&#xff1a;vector數組的去重操作 unique()將不重復的元素放在數組前面&#xff0c;重復元素移到后面&#xff0c;qs獲取不重復元素的后一個位置&#xff0c;之后用erase()函數去除重復元素。 qsunique(a.begin()1,a.begin()k1); a.erase(qs,a.end(…

linux之kylin系統nginx的安裝

一、nginx的作用 1.可做高性能的web服務器 直接處理靜態資源&#xff08;HTML/CSS/圖片等&#xff09;&#xff0c;響應速度遠超傳統服務器類似apache支持高并發連接 2.反向代理服務器 隱藏后端服務器IP地址&#xff0c;提高安全性 3.負載均衡服務器 支持多種策略分發流量…

MatAnyone本地部署,視頻分割處理,綠幕摳像(WIN/MAC)

大家好&#xff0c;今天要和大家分享的項目是MatAnyone&#xff0c;與上一篇分享的SAM2LONG類似&#xff0c;不過上次的分享沒有提到如何在 MAC 上部署&#xff0c;后來有小伙伴私信說希望能出一個 MAC 版本的。那正好看到MatAnyone這個項目順手就寫下來。該項目基于SAM2同樣可…

記錄下blog的成長過程

2025-06-11 新人榜83 2025-06-09 新人榜87 北京市原力月榜 80

C語言學習20250611

指針 指針類型 int p;》普通的整形變量int *p;》p先與*結合&#xff0c;表示p為指針&#xff0c;該指針指向的內容的數據類型為整型int p[3];》p為一個由整型數據組成的數組int *p[3];》因為[]比*優先級高&#xff0c;p先與方括號結合&#xff0c;所以p為一個數組&#xff0c…

【AI智能體】Dify 從部署到使用操作詳解

目錄 一、前言 二、Dify 介紹 2.1 Dify 是什么 2.2 Dify 核心特性 2.2.1 多模型支持 2.2.2 可視化編排工作流 2.2.3 低代碼/無代碼開發 2.3 Dify 適用場景 2.4 Dify 與Coze的對比 2.4.1 定位與目標用戶 2.4.2 核心功能對比 2.4.3 開發體驗與成本 2.4.4 適用場景對比…

Java爬蟲庫的選擇與實戰代碼

如果你的項目正在Java中考慮引入爬蟲能力&#xff0c;無論是做數據分析、信息聚合&#xff0c;還是競品監測&#xff0c;選對庫確實能大幅提升開發效率和運行效果。結合當前主流庫的特點與適用場景&#xff0c;我整理了一份更貼近實戰的對比分析&#xff0c;并附上可直接運行的…

詳細解釋aruco::markdetection _detectInitialCandidates函數

_detectInitialCandidates 是 OpenCV 的 ArUco 模塊中一個非常關鍵的函數&#xff0c;它負責檢測圖像中的候選 ArUco 標記。該函數的主要目標是&#xff1a; 使用多個尺度&#xff08;scale&#xff09;對輸入圖像進行自適應閾值處理&#xff1b;在每個尺度下提取輪廓并篩選出…

Android 開發中配置 USB 配件模式(Accessory Mode) 配件過濾器的配置

在 Android 開發中配置 USB 配件模式&#xff08;Accessory Mode&#xff09; 的配件過濾器&#xff08;accessory_filter.xml&#xff09;&#xff0c;需要以下步驟&#xff1a; 1. 創建配件過濾器文件 在項目的 res/xml/ 目錄下創建 accessory_filter.xml 文件&#xff08;若…

FreeRTOS互斥量

目錄 1.使用場合2.函數2.1 創建2.1.1 動態創建2.1.2 靜態創建 2.2 刪除2.3 釋放&#xff08;Give&#xff09;2.4 獲取&#xff08;Take&#xff09;2.5 ISR 版本注意事項 3.常規使用流程4.和二進制信號量的對比5.遞歸鎖5.1 死鎖5.2 概念5.2.1 問題5.2.2 解決方案&#xff1a;遞…

ThinkPad 交換 Ctrl 鍵和 Fn 鍵

概述 不知道那個大聰明設計的將fn設置在最左邊&#xff0c;xxx&#xff0c;我服了&#xff0c;你這個老六真惡心。 方法 一&#xff1a;BIOS/UEFI 設置&#xff08;推薦&#xff09; 重啟 你的 ThinkPad。 在啟動時按下 F1&#xff08;或 Enter&#xff0c;再按 F1&#xff0…

`dispatch_source_t` 計時器 vs `NSTimer`:核心差異一覽

維度GCD 計時器 (dispatch_source_t)NSTimer依賴機制直接掛在 GCD 隊列;底層走 Mach 內核定時源掛在 RunLoop,必須指定 RunLoop & mode線程上下文哪個隊列就在哪條線程回調(例中用 dispatch_get_main_queue())總在定時器所在的 RunLoop 線程(默認主線程 & NSDefau…

ubuntu22.04系統安裝部署docker和docker compose全過程!

更新系統包 首先&#xff0c;確保系統包是最新的&#xff1a; sudo apt updatesudo apt upgrade -y安裝依賴 安裝 Docker 所需的依賴包&#xff1a; sudo apt install -y apt-transport-https ca-certificates curl software-properties-common添加 Docker 官方 GPG 密鑰 添加…

企業如何增強終端安全?

在數字化轉型加速的今天&#xff0c;企業的業務運行越來越依賴于終端設備。從員工的筆記本電腦、智能手機&#xff0c;到工廠里的物聯網設備、智能傳感器&#xff0c;這些終端構成了企業與外部世界連接的 “神經末梢”。然而&#xff0c;隨著遠程辦公的常態化和設備接入的爆炸式…

VS2017----打開ui文件幾秒后閃退

問題描述 在vs2017中雙擊ui文件能夠打開,但是幾秒后就閃退了,提示報錯 問題解決 QT VS tools ----Options,把這個設置為True保存即可

深入解析Docker網橋模式:從docker0到容器網絡的完整通信鏈路

1. 簡介docker 網橋模式 Docker 啟動時默認創建 docker0 虛擬網橋&#xff08;Linux bridge&#xff09;&#xff0c;并分配私有 IP 地址范圍&#xff08;如 172.17.42.1/16&#xff09;&#xff0c;它的作用相當于一個虛擬交換機&#xff0c;讓宿主機和多個容器之間可以通信。…

Proof of Talk專訪CertiK聯創顧榮輝:全周期安全方案護航Web3生態

6月10日&#xff0c;CertiK聯合創始人兼CEO顧榮輝在Proof of Talk 2025舉辦期間&#xff0c;接受大會官方專訪&#xff0c;分享了他對Web3安全現狀的觀察以及CertiK的安全戰略布局。 顧榮輝指出&#xff0c;雖然安全的重要性被廣泛認可&#xff0c;但許多創業者和開發者仍存在…

再說一說LangChain Runnable接口

之前我們介紹過LangChain通過Runnable和LCEL來實現各個組件的快捷拼裝&#xff0c;整個過程就像拼積木一樣。 今天我們深入剖析Runnable接口的底層實現邏輯。 往期文章推薦: 16.Docker實戰&#xff1a;5分鐘搞定MySQL容器化部署與最佳實踐15.Ollama模板全解析&#xff1a;從基…

LLaMA-Factory微調Qwen3模型完了,怎么直接用vllm推理模型?

環境&#xff1a; LLaMA-Factory vllm0.8.5 Qwen3-8b 問題描述&#xff1a; LLaMA-Factory微調Qwen3模型完了,怎么直接用vllm推理模型&#xff1f; 解決方案&#xff1a; 一、合并 LoRA 權重與基礎模型 vLLM 需要完整的模型文件&#xff08;含合并后的權重&#xff09;…

C#AES加密

一、AES 加密概念 定義 &#xff1a;AES&#xff08;Advanced Encryption Standard&#xff0c;高級加密標準&#xff09;是一種對稱加密算法&#xff0c;由美國國家標準與技術研究院&#xff08;NIST&#xff09;于 2001 年發布&#xff0c;用于替代之前的 DES&#xff08;數據…