# 配置文件指南 ## 配置文件说明 项目统一使用 **`.properties`** 格式的配置文件,已删除所有 `.yml` 配置文件以避免混淆。 ## 配置文件结构 ### 1. 公共配置 (Common Module) 位于 `common/src/main/resources/` #### `application-common.properties` 公共的数据库、MyBatis Plus、日志配置,所有服务共享。 ```properties # 数据库连接池配置 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.driver-class-name=org.postgresql.Driver spring.datasource.druid.url=jdbc:postgresql://localhost:5432/lingyue_zhibao spring.datasource.druid.username=${DB_USERNAME:postgres} spring.datasource.druid.password=${DB_PASSWORD:postgres} # MyBatis Plus配置 mybatis-plus.mapper-locations=classpath*:mapper/**/*Mapper.xml mybatis-plus.configuration.map-underscore-to-camel-case=true mybatis-plus.global-config.db-config.id-type=assign_uuid # 日志配置 logging.level.root=INFO logging.level.com.lingyue=DEBUG ``` #### `application-infra.properties` 基础设施配置,包括 Nacos、RabbitMQ、Redis。 ```properties # Nacos服务发现 spring.cloud.nacos.discovery.server-addr=${NACOS_SERVER_ADDR:localhost:8848} # RabbitMQ配置 spring.rabbitmq.host=${RABBITMQ_HOST:localhost} spring.rabbitmq.port=${RABBITMQ_PORT:5672} # Redis配置 spring.data.redis.host=${REDIS_HOST:localhost} spring.data.redis.port=${REDIS_PORT:6379} ``` ### 2. 各服务配置 每个微服务都有自己的 `application.properties`: ``` backend/ ├── auth-service/src/main/resources/ │ └── application.properties # Auth 服务特定配置 ├── document-service/src/main/resources/ │ └── application.properties # Document 服务特定配置 ├── parse-service/src/main/resources/ │ └── application.properties # Parse 服务特定配置 ├── ai-service/src/main/resources/ │ └── application.properties # AI 服务特定配置 ├── graph-service/src/main/resources/ │ └── application.properties # Graph 服务特定配置 ├── notification-service/src/main/resources/ │ └── application.properties # Notification 服务特定配置 └── lingyue-starter/src/main/resources/ ├── application.properties # 单体应用主配置 ├── application-dev.properties # 开发环境配置 └── application-prod.properties # 生产环境配置 ``` ### 3. 单体应用配置 (Lingyue Starter) 这是最重要的配置文件,用于单体应用部署。 #### `application.properties` 主配置文件,包含所有基础配置。 ```properties # 引入公共配置 spring.config.import=classpath:application-common.properties,classpath:application-infra.properties # 服务端口 server.port=8000 # 应用名称 spring.application.name=lingyue-zhibao # 激活的环境 spring.profiles.active=dev # 文件上传 spring.servlet.multipart.max-file-size=20MB spring.servlet.multipart.max-request-size=100MB # JWT配置 jwt.secret=${JWT_SECRET:lingyue-zhibao-secret-key-2024-please-change-in-production} jwt.expiration=604800000 # SpringDoc API文档 springdoc.swagger-ui.enabled=true springdoc.swagger-ui.path=/swagger-ui.html # PaddleOCR配置 paddleocr.server-url=${PADDLEOCR_SERVER_URL:http://localhost:8866} # DeepSeek API配置 deepseek.api-key=${DEEPSEEK_API_KEY:} ``` #### `application-dev.properties` 开发环境配置,覆盖主配置。 ```properties # 开发环境日志级别 logging.level.com.lingyue=DEBUG logging.level.org.springframework.web=DEBUG # 热部署 spring.devtools.restart.enabled=true # SQL日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl ``` #### `application-prod.properties` 生产环境配置,使用环境变量。 ```properties # 生产环境日志级别 logging.level.com.lingyue=INFO logging.level.org.springframework.web=WARN # 数据库(使用环境变量) spring.datasource.druid.url=jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME} spring.datasource.druid.username=${DB_USERNAME} spring.datasource.druid.password=${DB_PASSWORD} # 禁用热部署 spring.devtools.restart.enabled=false # 禁用API文档(可选) springdoc.api-docs.enabled=false springdoc.swagger-ui.enabled=false ``` ## 配置优先级 Spring Boot 配置加载优先级(从高到低): 1. **命令行参数**: `java -jar app.jar --server.port=8080` 2. **环境变量**: `export SERVER_PORT=8080` 3. **application-{profile}.properties**: 如 `application-prod.properties` 4. **application.properties**: 主配置文件 5. **引入的配置文件**: `application-common.properties`, `application-infra.properties` ## 环境变量配置 ### 开发环境 ```bash # 使用默认配置,无需设置环境变量 java -jar lingyue-starter.jar ``` ### 生产环境 ```bash # 方式一: 设置环境变量 export SPRING_PROFILES_ACTIVE=prod export DB_HOST=db.example.com export DB_PORT=5432 export DB_NAME=lingyue_zhibao export DB_USERNAME=lingyue export DB_PASSWORD=your-secure-password export REDIS_HOST=redis.example.com export REDIS_PASSWORD=your-redis-password export RABBITMQ_HOST=rabbitmq.example.com export RABBITMQ_USERNAME=admin export RABBITMQ_PASSWORD=your-rabbitmq-password export JWT_SECRET=your-very-long-random-secret-key-at-least-32-characters export DEEPSEEK_API_KEY=your-deepseek-api-key java -jar lingyue-starter.jar # 方式二: 后台运行 nohup java -jar lingyue-starter.jar > app.log 2>&1 & ``` ### 常用环境变量列表 | 环境变量 | 说明 | 默认值 | 必需 | |---------|------|--------|------| | `SPRING_PROFILES_ACTIVE` | 激活的配置文件 | dev | 否 | | `DB_HOST` | 数据库主机 | localhost | 生产环境必需 | | `DB_PORT` | 数据库端口 | 5432 | 否 | | `DB_NAME` | 数据库名称 | lingyue_zhibao | 否 | | `DB_USERNAME` | 数据库用户名 | postgres | 是 | | `DB_PASSWORD` | 数据库密码 | postgres | 是 | | `REDIS_HOST` | Redis主机 | localhost | 是 | | `REDIS_PORT` | Redis端口 | 6379 | 否 | | `REDIS_PASSWORD` | Redis密码 | (空) | 否 | | `RABBITMQ_HOST` | RabbitMQ主机 | localhost | 是 | | `RABBITMQ_PORT` | RabbitMQ端口 | 5672 | 否 | | `RABBITMQ_USERNAME` | RabbitMQ用户名 | guest | 是 | | `RABBITMQ_PASSWORD` | RabbitMQ密码 | guest | 是 | | `JWT_SECRET` | JWT密钥 | (默认值) | **强烈建议设置** | | `PADDLEOCR_SERVER_URL` | OCR服务地址 | http://localhost:8866 | 如需OCR功能 | | `DEEPSEEK_API_KEY` | DeepSeek API密钥 | (空) | 如需AI功能 | | `DEEPSEEK_API_URL` | DeepSeek API地址 | https://api.deepseek.com | 否 | ## 配置验证 ### 1. 检查配置文件是否生效 启动应用后,查看日志中的配置信息: ```bash # 启动应用 java -jar lingyue-starter.jar # 日志中会显示: # - 激活的配置文件: spring.profiles.active # - 数据源连接信息 # - 服务端口 ``` ### 2. 访问配置端点(需要启用 Actuator) ```bash # 查看所有配置 curl http://localhost:8000/actuator/configprops # 查看环境变量 curl http://localhost:8000/actuator/env ``` ### 3. 验证数据库连接 访问 Druid 监控页面: - URL: http://localhost:8000/druid/ - 用户名: admin - 密码: admin123 ## 常见问题 ### 1. 配置文件不生效 **问题**: 修改了配置文件,但应用没有使用新配置。 **解决方案**: ```bash # 清理编译缓存 mvn clean # 重新编译 mvn package -DskipTests # 重启应用 ``` ### 2. 环境变量不生效 **问题**: 设置了环境变量,但应用仍使用默认值。 **解决方案**: ```bash # 检查环境变量是否正确设置 echo $DB_USERNAME echo $JWT_SECRET # 使用 -D 参数传递配置 java -jar lingyue-starter.jar -Dspring.datasource.druid.username=lingyue # 或使用 Spring Boot 的环境变量格式 export SPRING_DATASOURCE_DRUID_USERNAME=lingyue ``` ### 3. 数据库连接失败 **问题**: 应用启动时报数据库连接错误。 **解决方案**: ```properties # 检查 application.properties 中的配置 spring.datasource.druid.url=jdbc:postgresql://localhost:5432/lingyue_zhibao spring.datasource.druid.username=postgres spring.datasource.druid.password=postgres # 或设置环境变量 export DB_USERNAME=postgres export DB_PASSWORD=postgres ``` ### 4. JWT 密钥警告 **问题**: 日志中提示使用默认 JWT 密钥不安全。 **解决方案**: ```bash # 生成随机密钥(Linux/Mac) openssl rand -base64 48 # 设置环境变量 export JWT_SECRET=your-generated-secret-key # 或在 application.properties 中直接设置 jwt.secret=your-generated-secret-key ``` ## 最佳实践 1. **开发环境**: 使用 `application-dev.properties`,配置写在文件中 2. **生产环境**: 使用 `application-prod.properties`,敏感配置用环境变量 3. **敏感信息**: 永远不要把密码、密钥提交到 Git 仓库 4. **配置分离**: 公共配置放在 `application-common.properties`,特定配置放在各服务配置文件 ## 配置文件变更历史 - **2026-01-15**: 统一使用 `.properties` 格式,删除所有 `.yml` 文件 - **2026-01-15**: 创建 `application-common.properties` 和 `application-infra.properties` 公共配置 - **2026-01-15**: 为 `lingyue-starter` 创建 dev 和 prod 环境配置