Docker中Spring Boot Kotlin代码修改未生效,新增Controller访问404如何解决?
以下是针对你的问题的具体解决步骤:
1. 强制重新构建镜像并启动容器
Docker Compose默认会复用之前的构建缓存,导致代码修改后容器仍使用旧版本。执行以下命令强制重新构建镜像并启动服务:
docker-compose down docker-compose up --build
down会停止并删除旧容器,--build会强制重新构建Spring Boot服务的镜像,确保新代码被打包进去。
2. 本地预验证构建结果
先在本地执行Gradle构建命令,确认代码能正常编译并生成最新的jar包:
./gradlew clean build -x test
检查build/libs/twitch-bot-0.0.1-SNAPSHOT.jar的修改时间是否为最新,也可以解压jar包,确认UserController.class文件存在于对应目录下。
3. 验证容器内的jar包是否更新
启动容器后,执行以下命令进入容器内部检查:
docker exec -it <你的spring-boot容器名称或ID> bash
进入容器后,查看/app/build/libs/下的jar包修改时间,或者用jar tf /app/build/libs/twitch-bot-0.0.1-SNAPSHOT.jar | grep UserController确认类文件是否存在。
4. 检查Spring Boot组件扫描范围
确保你的UserController所在的包被Spring Boot扫描到。如果主应用类(带@SpringBootApplication注解的类)的包是com.example.twitchbot,而UserController在com.example.twitchbot.controller下,默认会自动扫描;如果Controller在其他包,需要在主类上添加@ComponentScan指定扫描路径,比如:
@SpringBootApplication(scanBasePackages = ["com.example.yourcontrollerpackage"]) class TwitchBotApplication { // ... }
5. 查看应用启动日志排查问题
通过日志确认应用启动时是否加载了UserController,以及是否有其他异常:
docker-compose logs spring-boot-kotlin
如果日志里没有显示Mapping GET "/users"相关信息,说明Controller没被Spring识别,需要检查组件扫描或Controller注解是否正确(比如有没有写错@RestController或@RequestMapping)。
内容的提问来源于stack exchange,提问作者AllAboutCake

