從基礎(chǔ)到實戰(zhàn)全解析Java加載Properties文件的六種方式
在Java開發(fā)中,Properties文件是最常用的配置文件格式之一,其以
key=value的鍵值對結(jié)構(gòu)存儲配置信息(如數(shù)據(jù)庫連接參數(shù)、接口地址、系統(tǒng)開關(guān)等),具有簡潔易維護、解耦配置與代碼的核心優(yōu)勢。不同場景下(如普通Java項目、Spring項目、Web應用、Java 9+模塊化項目),Properties文件的加載方式存在差異。本文將詳細拆解六種主流加載方式,包含適用場景、實現(xiàn)步驟、代碼示例、優(yōu)缺點及最佳實踐,幫助開發(fā)者靈活應對各類配置加載需求。
一、核心前提:Properties文件基礎(chǔ)
1. 文件格式與規(guī)范
- 后綴名:
.properties(默認)或.config(自定義) - 編碼:默認
ISO-8859-1(不支持中文),推薦顯式指定UTF-8 - 內(nèi)容格式:
key=value(等號可替換為:),注釋以#或!開頭 - 示例(
config.properties):
# 數(shù)據(jù)庫配置 db.url=jdbc:mysql://localhost:3306/test db.username=root db.password=123456 # 系統(tǒng)配置(中文需UTF-8編碼) system.name=測試系統(tǒng)
2. 核心API
Java通過java.util.Properties類操作Properties文件,核心方法:
load(InputStream inStream):從字節(jié)流加載配置(默認ISO-8859-1編碼)load(Reader reader):從字符流加載配置(支持指定編碼,如UTF-8)getProperty(String key):獲取指定key的value(無值時返回null)getProperty(String key, String defaultValue):獲取value,無值時返回默認值
二、六種加載方式詳解
方式一:ClassLoader.getResourceAsStream()(類路徑加載,最常用)
適用場景
- 普通Java項目、Spring Boot項目
- 配置文件放在
classpath下(如src/main/resources目錄) - 需跨環(huán)境(開發(fā)/測試/生產(chǎn))移植,無需關(guān)心文件系統(tǒng)絕對路徑
核心原理
通過類加載器(ClassLoader)讀取classpath下的資源文件,路徑以classpath根目錄為基準,無需寫絕對路徑,支持打包后(JAR/WAR)的資源加載。
實現(xiàn)步驟與代碼示例
- 配置文件位置:
src/main/resources/config.properties(Maven/Gradle項目標準目錄) - 加載代碼(支持三種ClassLoader獲取方式):
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class PropertiesLoader1 {
public static void main(String[] args) {
Properties props = new Properties();
// 方式1:當前類的ClassLoader(推薦,避免線程上下文類加載器問題)
try (InputStreamReader isr = new InputStreamReader(
PropertiesLoader1.class.getClassLoader().getResourceAsStream("config.properties"),
StandardCharsets.UTF_8)) { // 顯式指定UTF-8編碼,解決中文亂碼
props.load(isr);
} catch (IOException e) {
throw new RuntimeException("加載配置文件失敗", e);
}
// 方式2:Thread上下文類加載器(適用于多線程/框架場景)
/*try (InputStreamReader isr = new InputStreamReader(
Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties"),
StandardCharsets.UTF_8)) {
props.load(isr);
} catch (IOException e) {
throw new RuntimeException("加載配置文件失敗", e);
}*/
// 方式3:系統(tǒng)類加載器(與方式1效果一致,不推薦)
/*try (InputStreamReader isr = new InputStreamReader(
ClassLoader.getSystemClassLoader().getResourceAsStream("config.properties"),
StandardCharsets.UTF_8)) {
props.load(isr);
} catch (IOException e) {
throw new RuntimeException("加載配置文件失敗", e);
}*/
// 讀取配置
System.out.println("數(shù)據(jù)庫URL:" + props.getProperty("db.url"));
System.out.println("系統(tǒng)名稱:" + props.getProperty("system.name")); // 中文正常顯示
}
}路徑規(guī)則
- 相對路徑:直接寫文件名(如
"config.properties"),默認從classpath根目錄查找 - 子目錄:若文件在
src/main/resources/config/db.properties,路徑為"config/db.properties" - 禁止寫絕對路徑(如
"D:/config.properties"),類加載器僅識別classpath下的資源
優(yōu)缺點
- 優(yōu)點:跨環(huán)境移植性強、支持JAR包內(nèi)資源、無需關(guān)心文件系統(tǒng)路徑
- 缺點:僅能加載
classpath下的文件,無法加載外部文件系統(tǒng)的配置
方式二:FileInputStream(文件系統(tǒng)路徑加載)
適用場景
- 配置文件放在項目外部(如服務器特定目錄、用戶目錄)
- 需動態(tài)指定配置文件路徑(如通過命令行參數(shù)傳入)
- 非
classpath下的本地文件加載
核心原理
通過文件系統(tǒng)的絕對路徑或相對路徑,直接讀取文件字節(jié)流,依賴操作系統(tǒng)的文件系統(tǒng)接口。
實現(xiàn)步驟與代碼示例
- 配置文件位置:
D:/config/config.properties(絕對路徑)或./config.properties(項目根目錄相對路徑) - 加載代碼:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class PropertiesLoader2 {
public static void main(String[] args) {
Properties props = new Properties();
String filePath;
// 方式1:絕對路徑(Windows/Dinux通用,Linux路徑如"/opt/config/config.properties")
filePath = "D:/config/config.properties";
// 方式2:相對路徑(基準目錄為項目根目錄,如IDEA中為項目文件夾)
// filePath = "./config.properties";
// 方式3:命令行參數(shù)傳入路徑(靈活適配不同環(huán)境)
// if (args.length > 0) filePath = args[0];
try (InputStreamReader isr = new InputStreamReader(
new FileInputStream(filePath),
StandardCharsets.UTF_8)) { // 指定UTF-8編碼
props.load(isr);
} catch (IOException e) {
throw new RuntimeException("加載配置文件失敗,路徑:" + filePath, e);
}
// 讀取配置
System.out.println("數(shù)據(jù)庫用戶名:" + props.getProperty("db.username"));
System.out.println("數(shù)據(jù)庫密碼:" + props.getProperty("db.password"));
}
}路徑規(guī)則
- 絕對路徑:包含完整的盤符(Windows)或根目錄(Linux),如
"D:/config.properties"、"/opt/config.properties" - 相對路徑:以當前工作目錄為基準(IDEA中為項目根目錄,JAR運行時為啟動命令所在目錄),如
"./conf/config.properties"(項目根目錄下的conf文件夾) - 注意:相對路徑的基準目錄可能因運行環(huán)境變化(如IDE、腳本啟動、容器部署),需謹慎使用
優(yōu)缺點
- 優(yōu)點:可加載任意位置的文件、路徑靈活配置
- 缺點:移植性差(路徑依賴操作系統(tǒng))、需手動處理路徑正確性、打包后無法加載JAR內(nèi)的資源
方式三:Spring框架加載(@PropertySource + @Value)
適用場景
- Spring Framework、Spring Boot項目
- 需集成Spring的依賴注入(DI),自動注入配置屬性
- 支持多配置文件加載、占位符解析、配置優(yōu)先級管理
核心原理
Spring通過@PropertySource注解指定配置文件路徑,由PropertySourcesPlaceholderConfigurer自動加載配置,結(jié)合@Value注解注入屬性,支持classpath、文件系統(tǒng)路徑、URL等多種資源。
實現(xiàn)步驟與代碼示例
1. 普通Spring項目(XML配置)
<!-- applicationContext.xml -->
<context:component-scan base-package="com.example"/>
<context:property-placeholder
location="classpath:config.properties,file:D:/config/ext-config.properties"
file-encoding="UTF-8"/> <!-- 支持多文件、混合路徑、指定編碼 -->import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class SpringConfigLoader {
// 注入配置屬性,支持默認值
@Value("${db.url}")
private String dbUrl;
@Value("${db.username}")
private String dbUsername;
@Value("${system.name:默認系統(tǒng)}") // 無該key時返回默認值
private String systemName;
// 測試方法
public void printConfig() {
System.out.println("Spring加載 - 數(shù)據(jù)庫URL:" + dbUrl);
System.out.println("Spring加載 - 系統(tǒng)名稱:" + systemName);
}
}2. Spring Boot項目(注解驅(qū)動)
Spring Boot默認加載classpath:application.properties/application.yml,若需加載自定義文件,使用@PropertySource:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
// 加載classpath下的config.properties和外部文件
@Configuration
@PropertySource(value = {
"classpath:config.properties",
"file:D:/config/ext-config.properties"
}, encoding = "UTF-8") // 指定UTF-8編碼(Spring 4.3+支持)
public class BootConfigLoader {
@Value("${db.url}")
private String dbUrl;
@Value("${db.password}")
private String dbPassword;
@Value("${system.version:1.0.0}")
private String systemVersion;
// 提供getter方法供業(yè)務使用
public String getDbUrl() {
return dbUrl;
}
public String getDbPassword() {
return dbPassword;
}
}3. Spring Boot 2.4+ 推薦方式(application.properties指定額外配置)
# application.properties spring.config.import=classpath:config.properties,file:D:/config/ext-config.properties
路徑規(guī)則
classpath:前綴:加載classpath下的文件(如classpath:config.properties)file:前綴:加載文件系統(tǒng)路徑(如file:D:/config.properties)- 無前綴:默認按
classpath查找 - 支持URL路徑:如
https://config.example.com/config.properties(需網(wǎng)絡可達)
優(yōu)缺點
- 優(yōu)點:集成Spring生態(tài)、支持依賴注入、自動解析占位符、多文件加載、配置優(yōu)先級管理
- 缺點:依賴Spring框架、非Spring項目無法使用
方式四:Java 9+ Module資源加載(Module.getResourceAsStream())
適用場景
- Java 9及以上模塊化項目(使用
module-info.java) - 需遵循模塊的資源訪問控制(避免非模塊訪問模塊內(nèi)資源)
- 模塊化打包(JMOD/JAR)后的資源加載
核心原理
Java 9引入模塊系統(tǒng)(Module System)后,傳統(tǒng)ClassLoader加載資源可能受模塊權(quán)限限制,需通過Module接口的getResourceAsStream()方法加載模塊內(nèi)的資源,支持模塊間的資源訪問控制。
實現(xiàn)步驟與代碼示例
- 模塊化項目結(jié)構(gòu):
src/ ├── main/ │ ├── java/ │ │ ├── com/ │ │ │ └── example/ │ │ │ └── ModuleConfigLoader.java │ │ └── module-info.java │ └── resources/ │ └── config.properties
module-info.java配置(關(guān)鍵:開放資源訪問權(quán)限):
// 模塊名:com.example.config
module com.example.config {
// 允許其他模塊訪問本模塊的資源(可選,若僅內(nèi)部使用可省略)
opens com.example to java.base;
// 導出包(若需外部模塊使用加載類)
exports com.example;
}
- 加載代碼:
package com.example;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class ModuleConfigLoader {
public static void main(String[] args) {
Properties props = new Properties();
// 方式1:通過當前類的Module加載(推薦)
try (InputStreamReader isr = new InputStreamReader(
ModuleConfigLoader.class.getModule().getResourceAsStream("config.properties"),
StandardCharsets.UTF_8)) {
props.load(isr);
} catch (IOException e) {
throw new RuntimeException("模塊內(nèi)加載配置文件失敗", e);
}
// 方式2:通過模塊名獲取Module(需模塊已加載)
/*Module module = ModuleLayer.boot().findModule("com.example.config").orElseThrow();
try (InputStreamReader isr = new InputStreamReader(
module.getResourceAsStream("config.properties"),
StandardCharsets.UTF_8)) {
props.load(isr);
} catch (IOException e) {
throw new RuntimeException("加載模塊資源失敗", e);
}*/
// 讀取配置
System.out.println("模塊加載 - 數(shù)據(jù)庫URL:" + props.getProperty("db.url"));
System.out.println("模塊加載 - 系統(tǒng)名稱:" + props.getProperty("system.name"));
}
}關(guān)鍵注意事項
- 模塊內(nèi)資源默認僅允許模塊內(nèi)部訪問,若需外部模塊訪問,需在
module-info.java中通過opens語句開放資源所在包 - 資源路徑以模塊的
classpath為基準,與傳統(tǒng)類加載器路徑規(guī)則一致 - 避免使用
ClassLoader加載模塊化項目的資源,可能因模塊權(quán)限限制失敗
優(yōu)缺點
- 優(yōu)點:符合Java模塊化規(guī)范、資源訪問可控、支持模塊化打包
- 缺點:僅支持Java 9+、需額外配置
module-info.java、非模塊化項目無法使用
方式五:Apache Commons Configuration(第三方庫加載)
適用場景
- 需簡化加載邏輯(無需手動處理流、編碼)
- 支持多種配置格式(Properties、XML、JSON等)
- 需高級特性(配置刷新、變量插值、多文件合并)
核心原理
Apache Commons Configuration是Apache開源項目,提供了更強大的配置加載API,封裝了流處理、編碼轉(zhuǎn)換、異常處理等細節(jié),支持classpath、文件系統(tǒng)、URL等多種資源。
實現(xiàn)步驟與代碼示例
- 引入依賴(Maven):
<!-- Apache Commons Configuration 2.x -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>2.10.1</version>
</dependency>
<!-- 依賴 Commons Lang 和 Commons Collections -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>- 加載代碼:
import org.apache.commons.configuration2.PropertiesConfiguration;
import org.apache.commons.configuration2.ex.ConfigurationException;
public class CommonsConfigLoader {
public static void main(String[] args) {
PropertiesConfiguration config;
try {
// 方式1:加載classpath下的文件
config = new PropertiesConfiguration("config.properties");
// 方式2:加載文件系統(tǒng)路徑
// config = new PropertiesConfiguration("D:/config/config.properties");
// 方式3:指定編碼(默認UTF-8,無需額外處理中文)
// config = new PropertiesConfiguration();
// config.setEncoding("UTF-8");
// config.load("classpath:config.properties");
} catch (ConfigurationException e) {
throw new RuntimeException("加載配置文件失敗", e);
}
// 讀取配置(支持默認值、類型轉(zhuǎn)換)
String dbUrl = config.getString("db.url");
String dbUsername = config.getString("db.username");
String systemName = config.getString("system.name", "默認系統(tǒng)"); // 默認值
int dbPort = config.getInt("db.port", 3306); // 類型轉(zhuǎn)換+默認值
System.out.println("Commons加載 - 數(shù)據(jù)庫URL:" + dbUrl);
System.out.println("Commons加載 - 數(shù)據(jù)庫端口:" + dbPort);
System.out.println("Commons加載 - 系統(tǒng)名稱:" + systemName);
}
}核心特性
- 自動處理編碼(默認UTF-8),無需手動創(chuàng)建
InputStreamReader - 支持類型轉(zhuǎn)換(
getInt、getBoolean等) - 支持配置刷新(
config.refresh()) - 支持多文件合并(
CompositeConfiguration) - 支持變量插值(如
key=${other.key})
優(yōu)缺點
- 優(yōu)點:API簡潔、功能強大、支持多種格式、無需手動處理流
- 缺點:需引入第三方依賴、增加項目體積
方式六:ServletContext.getResourceAsStream()(Web應用專屬)
適用場景
- Java Web應用(Servlet、JSP、SSM等)
- 配置文件放在
WEB-INF目錄下(安全,不允許客戶端直接訪問) - 需通過Servlet上下文加載Web應用內(nèi)的資源
核心原理
Web應用啟動時,Servlet容器(Tomcat、Jetty)會創(chuàng)建ServletContext(Servlet上下文),通過其getResourceAsStream()方法可加載Web應用目錄下的資源,路徑以/開頭,基準目錄為Web應用根目錄(WEB-INF的上級目錄)。
實現(xiàn)步驟與代碼示例
- 配置文件位置:
WEB-INF/config/config.properties(Web應用目錄) - 加載代碼(Servlet中):
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
@WebServlet("/configLoader")
public class ServletConfigLoader extends HttpServlet {
private Properties props;
// 初始化時加載配置(Servlet生命周期)
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
props = new Properties();
// 通過ServletContext獲取資源流,路徑以"/"開頭(基準為Web應用根目錄)
String resourcePath = "/WEB-INF/config/config.properties";
try (InputStreamReader isr = new InputStreamReader(
getServletContext().getResourceAsStream(resourcePath),
StandardCharsets.UTF_8)) {
props.load(isr);
} catch (IOException e) {
throw new ServletException("Web應用加載配置文件失敗,路徑:" + resourcePath, e);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/plain;charset=UTF-8");
// 讀取配置并響應
String dbUrl = props.getProperty("db.url");
String systemName = props.getProperty("system.name");
resp.getWriter().write("Web加載 - 數(shù)據(jù)庫URL:" + dbUrl + "\n");
resp.getWriter().write("Web加載 - 系統(tǒng)名稱:" + systemName);
}
}路徑規(guī)則
- 路徑以
/開頭:基準目錄為Web應用根目錄(如Tomcat的webapps/應用名/) - 示例路徑:
/WEB-INF/config.properties:WEB-INF目錄下的配置文件/resources/config.properties:Web應用根目錄下的resources文件夾
- 禁止寫絕對路徑,僅支持Web應用內(nèi)的相對路徑
優(yōu)缺點
- 優(yōu)點:安全(
WEB-INF目錄不暴露給客戶端)、適配Web應用目錄結(jié)構(gòu) - 缺點:僅支持Web應用、依賴Servlet容器、非Web項目無法使用
三、六種加載方式對比總結(jié)
| 加載方式 | 適用場景 | 核心優(yōu)點 | 核心缺點 |
|---|---|---|---|
| ClassLoader.getResourceAsStream() | 普通Java項目、Spring Boot項目 | 跨環(huán)境移植性強、支持JAR內(nèi)資源、無需路徑依賴 | 僅加載classpath下文件 |
| FileInputStream | 外部配置文件、動態(tài)指定路徑 | 可加載任意位置文件、路徑靈活 | 移植性差、需手動處理路徑正確性 |
| Spring框架(@PropertySource) | Spring生態(tài)項目 | 支持DI注入、占位符解析、多文件加載 | 依賴Spring框架 |
| Java 9+ Module加載 | 模塊化項目(Java 9+) | 資源訪問可控、符合模塊化規(guī)范 | 僅支持Java 9+、需配置module-info.java |
| Apache Commons Configuration | 需高級配置特性(多格式、刷新) | API簡潔、功能強大、自動處理編碼 | 需引入第三方依賴 |
| ServletContext.getResourceAsStream() | Web應用 | 安全(WEB-INF)、適配Web目錄結(jié)構(gòu) | 僅支持Web應用、依賴Servlet容器 |
四、最佳實踐
1. 配置文件存放位置
- 普通Java項目:
src/main/resources(classpath根目錄),子目錄按功能劃分(如resources/config/db.properties) - Web應用:
WEB-INF/config(避免客戶端直接訪問) - 外部配置:生產(chǎn)環(huán)境建議放在服務器獨立目錄(如
/opt/config),通過環(huán)境變量或命令行參數(shù)指定路徑
2. 編碼處理規(guī)范
- 強制指定UTF-8編碼:使用
InputStreamReader(原生API)或框架自帶的編碼配置(Spring、Commons Configuration),避免中文亂碼 - 禁止在Properties文件中直接寫中文(即使指定UTF-8,部分工具可能不兼容),推薦使用Unicode編碼(如
system.name=\u6d4b\u8bd5\u7cfb\u7edf)
3. 路徑寫法規(guī)范
- 優(yōu)先使用
classpath:前綴(Spring項目)或相對classpath路徑(ClassLoader方式),避免絕對路徑 - 多環(huán)境適配:通過環(huán)境變量(如
${CONFIG_PATH})或配置中心(Nacos、Apollo)管理路徑,避免硬編碼
4. 避免硬編碼
- 禁止在代碼中寫死配置文件路徑(如
"D:/config.properties"),通過命令行參數(shù)、環(huán)境變量、Spring Profiles等方式動態(tài)指定 - 示例(Spring Boot多環(huán)境):
# application-dev.properties(開發(fā)環(huán)境) config.path=classpath:config-dev.properties # application-prod.properties(生產(chǎn)環(huán)境) config.path=file:/opt/config/config-prod.properties
5. 配置刷新機制
- 靜態(tài)配置:加載一次即可(如數(shù)據(jù)庫連接參數(shù))
- 動態(tài)配置:需支持刷新(如通過Apache Commons Configuration的
refresh()方法,或配置中心推送更新)
五、常見問題排查
| 問題現(xiàn)象 | 根因分析 | 解決方案 |
|---|---|---|
| 中文亂碼 | 未指定UTF-8編碼,默認ISO-8859-1不支持中文 | 使用InputStreamReader指定UTF-8,或框架編碼配置 |
| 找不到配置文件(FileNotFoundException) | 路徑錯誤(絕對路徑不存在、相對路徑基準錯誤) | 檢查路徑正確性、使用絕對路徑測試、打印System.getProperty("user.dir")確認基準目錄 |
| ClassLoader加載不到文件 | 文件未放在classpath下、路徑寫絕對路徑 | 移至src/main/resources、使用相對classpath路徑 |
| Spring @Value注入為null | 未加@PropertySource、配置文件路徑錯誤、未掃描組件 | 檢查注解配置、路徑正確性、@Component掃描范圍 |
| 模塊化項目加載失敗 | 模塊未開放資源訪問權(quán)限 | 在module-info.java中添加opens 包名 to 模塊名 |
六、總結(jié)
Java加載Properties文件的六種方式各有適配場景,核心選擇原則:
- 普通Java項目/ Spring Boot項目:優(yōu)先使用
ClassLoader.getResourceAsStream()或Spring的@PropertySource - 外部配置文件/動態(tài)路徑:使用
FileInputStream或命令行參數(shù)+classpath混合方式 - Web應用:使用
ServletContext.getResourceAsStream() - Java 9+模塊化項目:使用
Module.getResourceAsStream() - 需高級特性:使用Apache Commons Configuration
實際開發(fā)中,需結(jié)合項目類型(普通Java、Spring、Web、模塊化)、配置存放位置(classpath內(nèi)/外)、功能需求(動態(tài)刷新、多環(huán)境)選擇合適的加載方式,并遵循編碼規(guī)范、路徑規(guī)范、避免硬編碼等最佳實踐,確保配置加載的可靠性和可維護性。
到此這篇關(guān)于Java加載Properties文件的六種方式:從基礎(chǔ)到實戰(zhàn)全解析的文章就介紹到這了,更多相關(guān)Java加載Properties文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Cloud?Stream消息驅(qū)動組件使用方法介紹
Spring?Cloud?Stream?消息驅(qū)動組件幫助我們更快速,更方便,更友好的去構(gòu)建消息驅(qū)動微服務的。當時定時任務和消息驅(qū)動的?個對比。消息驅(qū)動:基于消息機制做一些事情2022-09-09
Spring中@Controller和@RestController的區(qū)別詳解
這篇文章主要介紹了Spring中@Controller和@RestController的區(qū)別詳解,@RestController?是?@Controller?和?@ResponseBody?的結(jié)合體,單獨使用?@RestController?的效果與?@Controller?和?@ResponseBody?二者同時使用的效果相同,需要的朋友可以參考下2023-10-10
SpringSecurity實現(xiàn)動態(tài)加載權(quán)限信息的方法
這篇文章主要介紹了SpringSecurity實現(xiàn)動態(tài)加載權(quán)限信息,本文給大家介紹的非常詳細,對大家的學習或工作具有一定需要的朋友可以參考下2022-01-01
java微信公眾號開發(fā)(搭建本地測試環(huán)境)
這篇文章主要介紹了java微信公眾號開發(fā),主要內(nèi)容有測試公眾號與本地測試環(huán)境搭建,需要的朋友可以參考下2015-12-12
SpringBoot實現(xiàn)大模型流式Streaming響應的示例代碼
這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)大模型流式Streaming響應的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2026-01-01

