java 工作中踩过的坑,java开发过程中踩过的一些坑

本文总结了Spring Boot项目开发中遇到的几个常见问题,包括模块间jar包冲突、主入口选择、事务失效以及Feign调用问题。提供了详细的解决方案,帮助开发者快速排查和避免这些问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录开发中遇到的一些坑, 便于以后回顾, 也给面试的小伙伴提供一些素材.

1. springboot多模块项目中基础模块install失败, 或虽然install成功, 但是仓库中的jar包为springboot的可执行jar

原因: 查看打包日志可以发现, maven自身的打包插件先执行生成一个文件A(xx.jar), 之后springboot的打包插件再次执行打包又生成一个同名的文件B(xx.jar), 此时B文件会覆盖A文件

解决方案: 修改springboot的打包插件配置, 给打包结果添加一个后缀, 使其打包结果文件和maven自身打包结果文件不一样

org.springframework.boot

spring-boot-maven-plugin

exec

true

true

2. springboot打包时失败, 提示spring-boot-maven-plugin:2.1.6.RELEASE: Unable to find a single main class from the following candidates[xxx.xxx.xx, xxx.xxx.xx, ......] 或spring-boot-maven-plugin:2.1.6.RELEASE:repackage failed: Unable to find main class

1. pom.xml文件中设置parent为springboot, 且项目中有两个或两个以上的main方法, 且这些main方法所在的类上面没有@SpringBootApplication注解(即不确定哪个main方法作为主入口)

2. pom.xml文件中设置parent为springboot, 但项目中没有main方法

解决方案:

保证项目中有且今有一个main方法.在springboot中一般都仅有一个main方法, 其他的main方法更多的是做测试遗留的. 所以删掉不必要的main方法, 获取添加一个main方法

3. 在service层调用自身有事务的方法, 事务不生效

原因: 自调用时,用的不是ioc容器中的bean, 所以不会被aop做增强处理.

解决方案: 先获取ioc容器中相应的bean, 然后通过这个bean调用其他方法, 可参考:https://blog.youkuaiyun.com/changerzhuo_319/article/details/97095755

4. service层有多个方法, 且方法中都调用了mapper接口, 在A方法中mapper接口可以正常调用, 在B方法中mapper实例时null

原因: 事务仅对public、非static方法生效

解决方案: 修改方法的修饰符

5. springboot, mybatis多数据源时, 在配置文件中配置的下划线转驼峰不生效

可能原因:在配置文件中并没有指定具体哪个数据源需要下划线转驼峰, 所以没生效

解决方案: 在每个数据源配置中添加下划线转驼峰, 其他一些配置也需要在每个数据源中配置爱

6. feign 调用其他服务时, 用的get请求, 但报错提示post请求不支持

原因: 暂时未知

解决方案: 在请求参数上加上@requestParam("name")注解

Docker是一种容器化技术,可以让开发者将应用程序及其所有依赖项打包到一个可移植的容器中,以便在任何环境中运行。以下是Docker的基础教程: 1. 安装Docker 首先,你需要在你的机器上安装Docker。可以根据你的操作系统选择合适的安装方式。可以在Docker官网上找到安装指南。 2. 创建Docker镜像 镜像是Docker中的核心概念。镜像是一个只读的模板,用于创建Docker容器。你可以创建自己的镜像,也可以从Docker Hub上下载镜像。 要创建一个Docker镜像,需要编写Dockerfile。Dockerfile是一个文本文件,其中包含一系列指令,用于构建镜像。以下是一个简单的Dockerfile示例: ``` FROM ubuntu:latest RUN apt-get update && apt-get install -y nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` 这个Dockerfile会从最新的Ubuntu镜像开始,安装Nginx,并将容器的80端口映射到主机的80端口。最后,它将启动Nginx。 要构建镜像,请使用以下命令: ``` docker build -t my-nginx-image . ``` 这将使用当前目录中的Dockerfile构建一个名为“my-nginx-image”的镜像。 3. 运行Docker容器 一旦你有了Docker镜像,就可以使用它来创建Docker容器。容器是镜像的一个可运行实例。 要运行一个Docker容器,请使用以下命令: ``` docker run -p 80:80 my-nginx-image ``` 这将创建一个名为“my-nginx-container”的容器,并将容器的80端口映射到主机的80端口。 4. Docker命令 以下是一些常用的Docker命令: - docker ps:列出当前正在运行的容器。 - docker images:列出当前所有的镜像。 - docker stop <container-id>:停止指定的容器。 - docker rm <container-id>:删除指定的容器。 - docker rmi <image-id>:删除指定的镜像。 这些基本的Docker命令可以帮助你管理容器和镜像。 这些是Docker的基础教程。Docker还有许多高级特性和用法,例如Docker Compose和Docker Swarm。如果你对Docker感兴趣,可以进一步学习这些内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值