文章目录
pom.xml
修改之后马上重新加载一下。
不然IDEA不会给你更新
添加的文件要求
该加的加,不该加的别加。
貌似spring里面各个库里面有依赖关系。而且,里面的依赖只是根据名称判断的。
这种情况下,编译能通过,但是运行会报错。
推测java这个地方使用了解释型执行的方式,灵活但是不严谨。
bootstrap.yml 的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-context</artifactId>
</dependency>
就是这么坑。我把工程从头到尾清理了一遍才发现这个问题。
加载正确了是这个图标
加载不正确的话
各种报错
required a bean of type
Parameter 1 of constructor in xx.xxxx.xxxx.xxxx required a bean of type 'xx.xx.xxxx.xxx' that could not be found.
如果你这个类是从别的模块引用的,就需要在启动类那里添加一行。类似
@ComponentScan(basePackages = {“cn.xxx.xxxx.XXXX”})
模块引用
就是一个工程中,通常将公共的方法类放在一个模块中。
方法就是在pom.xml中添加
<dependency>
<groupId>cn.dddd</groupId>
<artifactId>xxx-aaaaa-bbb</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
启动类前面添加
@MapperScan({“cn.sss.eeee.ttt”,“cn.sss.dddd.qqqq”})
@ComponentScan(basePackages = {“cn.sss.dddd.qqqq”}) //因为程序默认只扫描当前目录下的,因为此处引用了别的地方的,所以这里要添加上。
你自己尝试写个简单的demo测试一下就明白了。
不建议在你自己的代码中引用自己工程中模块
建议:直接复制java文件吧。
因为:
1,容易引起你的jar包体积急剧增大。我猜测打包好的jar包里面把所有的依赖都包含了。
(不信你就试试)
2,引起你的@RestController不起作用了,也就是接口访问不了了。
编译运行都没报错。但是接口就是访问不了; 端口是通的,但是就是不行。
我比较了一下,只要是使用了这种方法
@ComponentScan(basePackages = {"cn.dd.ttt","cn.ss.mmm"}) //因为程序默认只扫描当前目录下的,因为此处引用了别的地方的,所以这里要添加上
就会出现访问的问题。
没加@ComponentScan的话,springboot报的是bean的错误。
这个bug我找了一天,把代码一点一点的堆上去才定位到问题出在哪里。
我尝试创建了一个Filter来看看请求进来了没有。结果发现,这个Filter没有被初始化。
参考:SpringBoot配置一个过滤器获取远程地址、访问路径等信息,然后我就不再研究了。
总结
感觉java语言太不严谨了。
编译器或者说运行时报的错误提示都不太准确,只能bing或者google。