文章内容简要:
1、命令行启动,打包程序
2、mvn打包去除对test代码编译,修改打包名称
3、springboot自动扫描包的配置
1、IDEA命令行可通过在项目根目录执行命令mvn spring-boot:run
启动程序,ctrl+c
结束运行
注意:如果提示mvn不是内部或外部命令,也不是可运行的程序或批处理文件问题说明本地没有配置maven环境变量,配置即可。
配置方式如下
变量名:MAVEN_HOME,变量值:maven安装路径,如:D:\apache-maven-3.6.3
变量名:Path,变量值:%MAVEN_HOME%\bin
2、命令行可通过执行命令mvn package
打包
可在pom文件使用以下标签修改打包后的文件名称
<build>
<finalName>application-${version}</finalName>
</build>
打包时会默认对代码test部分进行编译,可使用以下标签跳过检测
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
也可用过以下方法实现对test代码跳过编译检查
打包后可在项目根目录下通过该命令启动服务
java -jar target/application-0.0.1-SNAPSHOT.jar
同样可以通过ctrl+c
结束运行
3、springboot扫描包机制
springboot会默认扫描启动程序application所在同级目录,以及子级目录的所有带有注册注解的类(@Controller
,@Service
,@Mapper
等)
例如:下图中的目录结构,所有Demo
类都加上了注解@RestController
Demo
,Demo2
是application
所在包project
的子级目录下的类;
Demo3
是同级目录下的类;
Demo4
是与application
不同级目录的类(一个是xxx.test.Demo4
,一个是xxx.project.application
)
启动程序后,请求Demo
,Demo2
,Demo3
都可正常返回,请求Demo4
的结果却是返回404,说明该类未注册成功
目录结构
Demo
类代码
@RestController
public class Demo {
@GetMapping(value = "demo")
public String hello(){
return "hello world";
}
}
请求Demo3
结果
请求Demo4
结果
这种情况下有两种办法可以使Demo4
被注册到IOC容器内
第一种办法,使用@ComponentScan
注解
在application
上使用@ComponentScan(value = "com.*.test")
来指定想要注册的实体类所在包
注意:加上注解以后,之前与application
所在相同包可默认注册的类,不再进行自动注册,也就是以配置的扫描包的路径为准,因此还需要加上之前Demo
,Demo2
,Demo3
所在的包的路径
注册全部Demo
类:
@ComponentScan(value = {"com.*.test","com.*.project"})
第二种办法,使用@SpringBootApplication
的scanBasePackages
属性
与@ComponentScan
用法相似,也需要考虑之前默认注册的问题,在application
上使用,使用方法如下:
@SpringBootApplication(scanBasePackages={"com.*.test","com.*.project"})
可以正常访问了!
学习参考文章:http://blog.yuqiyu.com/spring-boot-basic-default-scan-package.html?from=jianshu