一、背景
害,距离上一篇成长记录已经有段时间了,中间由于各种各样的事情耽误导致未能静下心来记录,罪过罪过
最近新开一个java项目,用的是组内提供的项目模板,原本是多模块的项目,但是由于自己的项目只有一个模块,就把模板改了改,开始用了起来。
一开始写个http接口啥的用的都挺正常的,然后开始连接数据库,导入mybatis,然后就发现程序启动报错,于是开始了排查之旅。
二、排查之旅
(1)提示没有配置数据源
咦,数据源的配置分明在application-dev.yml写的清清楚楚的,都是从之前项目copy过来的,怎么会有问题?
在网上查找了下相关的资料,尝试解决方案,并将spring-datasource的相关配置来回检查,来回移动位置,但始终没有变化。
(2)yml文件没有生效
将yml的配置参数统统丢掉,只留下server-port,将端口改为7777,再次启动程序,发现启动是正常的,但是端口号并没有更改,还是监听的8080,突然有点方向了,那么为什么yml文件没有生效呢?
请教有经验的同事+网上查找,按理说resources里面的yml文件肯定是会生效的呀,又陷入了死胡同!
(3)spring boot 启动探究
spring boot 启动的时候是怎么将resources里面的配置引入进来的呢?
上面这两篇文章将配置文件的加载流程写的很清楚,也实际调试了一番,看到去读取classpath:/application.yml的时候读不到
(4)classpath的问题?
-
src 路径下的文件 在编译后都会放到 WEB-INF/classes 路径下。默认classpath 就是指这里。
-
用maven构建 项目时,resources 目录就是默认的classpath
看了下果然是空空如也,那么就应该是编译的时候没有导入进来的原因了!
(5)编译
编译是根据pom.xml来的,仔细查看里面的参数,在顶部清清楚楚的写着罪魁祸首!
<packaging>pom</packaging>
于是去查找了下相关资料:
POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的一个XML文件:pom.xml。此文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的继承和依赖关系等等。在Maven项目中,必须包含pom.xml文件。
Maven常用的打包类型:
Maven项目常用的打包类型分为:jar、war、pom等类型。
默认打包类型为:jar。
三、解决与验证
去掉这行代码或者改成jar,验证一波,果然一切正常了~
四、后记
在转java的过程中总能碰到其他同事遇不到的问题,主要是对一些参数配置不甚了解,
过程中也请教过同事,对pom.xml的检查力度比较小,关注点都集中在yml文件上,可能正常的开发都不会写错这边打包方式吧
其实也挺好的,经过这次排查,了解了springboot的启动、打包方式的不同、classpath等内容,
慢慢踩坑,慢慢填坑,才能慢慢成长。