springboot
<!-- Spring Boot 的 Spring Web MVC 集成 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 注解校驗代替ifelse -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- 測試 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency><!-- Spring boot 特殊處理包 -->
<dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId><version>${reflections.version}</version>
</dependency>
接口文檔
- 這是一個 Spring Boot Starter,通過自動配置簡化了 Swagger 的集成。
- 用戶只需添加依賴,無需手動配置
Docket
Bean,適合快速集成。
<!-- Spring Boot 集成 swagger -->
<dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId>
</dependency>
- 需要手動配置
Docket
Bean,配置相對復雜。
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId>
</dependency>
由于 swagger-spring-boot-starter
和 springfox-swagger2
都存在維護問題,且不兼容 Spring Boot 3.x,推薦使用 SpringDoc OpenAPI 作為替代方案:
- 特點:
- 完全支持 Spring Boot 3.x。
- 基于 OpenAPI 3.0 標準。
- 配置簡單,與 Spring Boot 集成良好。
- 社區活躍,維護狀態良好。
<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.2.0</version> <!-- 使用最新版本 -->
</dependency>
- 配置示例:
- 無需額外配置,SpringDoc 會自動掃描所有
@RestController
并生成 API 文檔。 - 訪問
http://localhost:8080/swagger-ui.html
查看文檔。
- 無需額外配置,SpringDoc 會自動掃描所有
knife4j是為Java MVC框架集成Swagger生成Api文檔的增強解決方案,前身是swagger-bootstrap-ui,取名kni4j是希望它能像一把匕首一樣小巧,輕量,并且功能強悍!
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
數據庫相關
mysql
<!-- MySQL 驅動 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
<!-- mybatis plus的依賴 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
MongoDB

驗證碼
<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version>
</dependency>
redis
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.6.2</version>
</dependency>
分布式鎖
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.11.2</version>
</dependency>

lombok
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
微服務
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
遠程調用微服務/熔斷/降級
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
認證授權
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-security</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-oauth2</artifactId>
</dependency>
JSON 解析庫
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId>
</dependency>
支付寶支付
<!-- 支付寶SDK -->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.7.73.ALL</version>
</dependency><!-- 支付寶SDK依賴的日志 -->
<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
</dependency>
二維碼生成&識別組件
<!-- 二維碼生成&識別組件 -->
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version>
</dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.3</version>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId>
</dependency>
消息中間件
一個放在生產方,一個放在消費方
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
kafka
文件處理
<!--根據擴展名取mimetype-->
<dependency><groupId>com.j256.simplemagic</groupId><artifactId>simplemagic</artifactId><version>1.17</version>
</dependency>
日志相關
log.info()
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
log4j2-dev.xml
排除 Logback 依賴:
Spring Boot Starter 默認包含 Logback,需要排除它。
<dependencies><!-- Spring Boot Starter Web(排除 Logback) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!-- 添加 Log4j2 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency>
</dependencies>
Spring Boot Starter Web 已經包含 Logback
- Spring Boot 默認不會強制要求使用
logback-spring.xml
,而是優先加載它(如果存在)。 - 如果
logback-spring.xml
不存在,Spring Boot 會回退到加載logback.xml
(如果存在)。 - 因此,即使不加
-spring
后綴,logback.xml
也能被讀取,但會失去 Spring Boot 提供的增強功能。
如何加載 logback-dev.xml
方法 1:通過 logging.config
屬性顯式指定
-
Spring Boot 配置:
-
在 Spring Boot 中,可以通過application.properties或application.yml
指定自定義的 Logback 配置文件路徑:
# application.properties logging.config=classpath:logback-dev.xml
或
# application.yml logging:config: classpath:logback-dev.xml
-
這樣,Spring Boot 會加載
logback-dev.xml
而不是默認的logback-spring.xml
或logback.xml
。
-
方法 2:通過 JVM 參數指定
-
啟動時傳遞參數
:
-
在啟動應用時,可以通過 JVM 參數指定 Logback 配置文件:
bashjava -Dlogging.config=classpath:logback-dev.xml -jar your-app.jar
-
這樣,Logback 會加載指定的配置文件。
-
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
如果需要單獨配置 Logback,可以顯式添加(但通常不需要):
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency>
推薦做法:
-
在
logback-spring.xml
中使用<springProfile>
標簽定義不同 Profile 的日志配置:<configuration><!-- 開發環境配置 --><springProfile name="dev"><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="DEBUG"><appender-ref ref="CONSOLE"/></root></springProfile><!-- 生產環境配置 --><springProfile name="prod"><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>./logs/app.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="FILE"/></root></springProfile> </configuration>
啟動時指定 Profile:
bashjava -Dspring.profiles.active=dev -jar your-app.jar
文件存儲服務
<!-- 分布式文件系統 minIO的客戶端API包 -->
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>${minio.version}</version>
</dependency>
任務相關
<!--分布式任務調度-->
<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${xxl-job-core.version}</version>
</dependency>
搜索
<!--elasticsearch-->
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.4.0</version>
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.4.0</version>
</dependency>
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.4.0</version>
</dependency>
nacos注冊中心相關
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
頁面靜態化
<?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"><parent><artifactId>heima-leadnews-test</artifactId><groupId>com.heima</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>freemarker-demo</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!-- apache 對 java io 的封裝工具庫 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency></dependencies></project>
加密
<!--加密處理包-->
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>${commons.codec.version}</version>
</dependency>
網關相關
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--jwt解析--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId></dependency>
</dependencies>
字符串操作
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version> <!-- 使用最新版本 -->
</dependency>
// 判斷token是否存在
if (StringUtils.isBlank(token)) {response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();
}
IO
<!-- apache 對 java io 的封裝工具庫 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version>
</dependency>
測試
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>
</dependency>
阿里云內容安全
內容安全1.0需要企業認證
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-green</artifactId>
</dependency>
內容安全增強版
<!--安裝內容檢測SDK-->
<dependency><groupId>com.aliyun</groupId><artifactId>green20220302</artifactId><version>2.1.0</version>
</dependency><!--安裝OSS SDK-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.16.3</version>
</dependency>
阿里視覺智能開發平臺的審核功能
<dependency><groupId>com.aliyun</groupId><artifactId>imageaudit20191230</artifactId><version>2.0.6</version>
</dependency>
<dependency><groupId>com.aliyun</groupId><artifactId>viapi-utils</artifactId><version>1.0.2</version>
</dependency>
ocr
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.1.1</version>
</dependency>

序列化
<dependency><groupId>io.protostuff</groupId><artifactId>protostuff-core</artifactId><version>1.6.0</version>
</dependency>
<dependency><groupId>io.protostuff</groupId><artifactId>protostuff-runtime</artifactId><version>1.6.0</version>
</dependency>
/*** jdk序列化*/
public class JdkSerializeUtil {/*** 序列化* @param obj* @param <T>* @return*/public static <T> byte[] serialize(T obj) {if (obj == null){throw new NullPointerException();}ByteArrayOutputStream bos = new ByteArrayOutputStream();try {ObjectOutputStream oos = new ObjectOutputStream(bos);oos.writeObject(obj);return bos.toByteArray();} catch (Exception ex) {ex.printStackTrace();}return new byte[0];}/*** 反序列化* @param data* @param clazz* @param <T>* @return*/public static <T> T deserialize(byte[] data, Class<T> clazz) {ByteArrayInputStream bis = new ByteArrayInputStream(data);try {ObjectInputStream ois = new ObjectInputStream(bis);T obj = (T)ois.readObject();return obj;} catch (Exception ex) {ex.printStackTrace();}return null;}}
public class ProtostuffUtil {/*** 序列化* @param t* @param <T>* @return*/public static <T> byte[] serialize(T t){Schema schema = RuntimeSchema.getSchema(t.getClass());return ProtostuffIOUtil.toByteArray(t,schema,LinkedBuffer.allocate(LinkedBuffer.DEFAULT_BUFFER_SIZE));}/*** 反序列化* @param bytes* @param c* @param <T>* @return*/public static <T> T deserialize(byte []bytes,Class<T> c) {T t = null;try {t = c.newInstance();Schema schema = RuntimeSchema.getSchema(t.getClass());ProtostuffIOUtil.mergeFrom(bytes,t,schema);} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return t;}/*** jdk序列化與protostuff序列化對比* @param args*/public static void main(String[] args) {long start =System.currentTimeMillis();for (int i = 0; i <1000000 ; i++) {WmNews wmNews =new WmNews();JdkSerializeUtil.serialize(wmNews);}System.out.println(" jdk 花費 "+(System.currentTimeMillis()-start));start =System.currentTimeMillis();for (int i = 0; i <1000000 ; i++) {WmNews wmNews =new WmNews();ProtostuffUtil.serialize(wmNews);}System.out.println(" protostuff 花費 "+(System.currentTimeMillis()-start));}}