fix: 补齐L09的MinerU自动装配配置类

- 新增 MinerU Spring Boot 配置属性类

- 新增 PDF 文档解析自动装配并暴露统一 DocumentParseService
This commit is contained in:
2026-04-14 19:58:09 +08:00
parent aa3e90b990
commit 0c7b362173
2 changed files with 184 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
package com.easyagents.spring.boot.document.pdf.mineru;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* MinerU Spring Boot 配置。
*
* @author Codex
* @since 2026-04-14
*/
@ConfigurationProperties(prefix = "easy-agents.document.pdf.mineru")
public class MineruDocumentProperties {
private String baseUrl;
private Integer connectTimeoutMs = 3000;
private Integer readTimeoutMs = 600000;
private Integer writeTimeoutMs = 600000;
private Integer pollIntervalMs = 1000;
private Integer resultTimeoutMs = 1800000;
private String defaultBackend = "vlm-http-client";
private String defaultParseMethod = "auto";
private List<String> defaultLangList = new ArrayList<String>(Arrays.asList("ch"));
private Boolean defaultFormulaEnable = true;
private Boolean defaultTableEnable = true;
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
public Integer getConnectTimeoutMs() {
return connectTimeoutMs;
}
public void setConnectTimeoutMs(Integer connectTimeoutMs) {
this.connectTimeoutMs = connectTimeoutMs;
}
public Integer getReadTimeoutMs() {
return readTimeoutMs;
}
public void setReadTimeoutMs(Integer readTimeoutMs) {
this.readTimeoutMs = readTimeoutMs;
}
public Integer getWriteTimeoutMs() {
return writeTimeoutMs;
}
public void setWriteTimeoutMs(Integer writeTimeoutMs) {
this.writeTimeoutMs = writeTimeoutMs;
}
public Integer getPollIntervalMs() {
return pollIntervalMs;
}
public void setPollIntervalMs(Integer pollIntervalMs) {
this.pollIntervalMs = pollIntervalMs;
}
public Integer getResultTimeoutMs() {
return resultTimeoutMs;
}
public void setResultTimeoutMs(Integer resultTimeoutMs) {
this.resultTimeoutMs = resultTimeoutMs;
}
public String getDefaultBackend() {
return defaultBackend;
}
public void setDefaultBackend(String defaultBackend) {
this.defaultBackend = defaultBackend;
}
public String getDefaultParseMethod() {
return defaultParseMethod;
}
public void setDefaultParseMethod(String defaultParseMethod) {
this.defaultParseMethod = defaultParseMethod;
}
public List<String> getDefaultLangList() {
return defaultLangList;
}
public void setDefaultLangList(List<String> defaultLangList) {
this.defaultLangList = defaultLangList == null
? new ArrayList<String>(Arrays.asList("ch"))
: defaultLangList;
}
public Boolean getDefaultFormulaEnable() {
return defaultFormulaEnable;
}
public void setDefaultFormulaEnable(Boolean defaultFormulaEnable) {
this.defaultFormulaEnable = defaultFormulaEnable;
}
public Boolean getDefaultTableEnable() {
return defaultTableEnable;
}
public void setDefaultTableEnable(Boolean defaultTableEnable) {
this.defaultTableEnable = defaultTableEnable;
}
}

View File

@@ -0,0 +1,65 @@
package com.easyagents.spring.boot.document.pdf.mineru;
import com.easyagents.document.core.DocumentParseService;
import com.easyagents.document.pdf.PdfDocumentParseService;
import com.easyagents.document.pdf.mineru.MineruPdfDocumentParseService;
import com.easyagents.document.pdf.mineru.MineruProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MinerU PDF 文档解析自动装配。
*
* @author Codex
* @since 2026-04-14
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(MineruPdfDocumentParseService.class)
@ConditionalOnProperty(prefix = "easy-agents.document.pdf", name = "provider", havingValue = "mineru")
@EnableConfigurationProperties(MineruDocumentProperties.class)
public class MineruPdfAutoConfiguration {
/**
* 注册统一 PDF 解析服务。
*
* @param properties Spring Boot 配置
* @return PDF 解析服务
*/
@Bean
@ConditionalOnMissingBean(PdfDocumentParseService.class)
public PdfDocumentParseService pdfDocumentParseService(MineruDocumentProperties properties) {
return new MineruPdfDocumentParseService(toMineruProperties(properties));
}
/**
* 将 PDF 服务以统一文档解析服务类型暴露,便于调用方直接按抽象注入。
*
* @param pdfDocumentParseService PDF 解析服务
* @return 统一文档解析服务
*/
@Bean
@ConditionalOnMissingBean(DocumentParseService.class)
public DocumentParseService documentParseService(PdfDocumentParseService pdfDocumentParseService) {
return pdfDocumentParseService;
}
private MineruProperties toMineruProperties(MineruDocumentProperties properties) {
MineruProperties mineruProperties = new MineruProperties();
mineruProperties.setBaseUrl(properties.getBaseUrl());
mineruProperties.setConnectTimeoutMs(properties.getConnectTimeoutMs());
mineruProperties.setReadTimeoutMs(properties.getReadTimeoutMs());
mineruProperties.setWriteTimeoutMs(properties.getWriteTimeoutMs());
mineruProperties.setPollIntervalMs(properties.getPollIntervalMs());
mineruProperties.setResultTimeoutMs(properties.getResultTimeoutMs());
mineruProperties.setDefaultBackend(properties.getDefaultBackend());
mineruProperties.setDefaultParseMethod(properties.getDefaultParseMethod());
mineruProperties.setDefaultLangList(properties.getDefaultLangList());
mineruProperties.setDefaultFormulaEnable(properties.getDefaultFormulaEnable());
mineruProperties.setDefaultTableEnable(properties.getDefaultTableEnable());
return mineruProperties;
}
}