
2.3 开发Spring Boot启动类
由于Spring Boot项目默认整合了Web服务器Tomcat,因此启动起来相当方便:运行Spring Boot项目中的启动类即可完成启动的动作。
通过启动类启动Spring Boot项目后,该项目会在指定端口(默认是8080)上监听URL请求,并把请求交给控制器类处理,由此对外提供服务。对应终止Spring Boot的启动类,即可起到让Spring Boot项目停止运行的效果。
2.3.1 对注解@SpringBootApplication的说明
在第1章已经给出了关于Spring Boot启动类的范例,这里将围绕@SpringBootApplication注解进一步讲解启动类的相关知识点。
为了演示Spring Boot的启动类,这里需要创建名为StarterDemo的Maven项目,该项目的pom.xml文件和第1章myFirstSpringBootPrj项目的pom.xml很相似,所以不再讲述,读者可以自行阅读相关代码。
在本项目中新建一个名为Starter的package包,并在其中新建一个名为SpringBootApp.java的启动类,该启动类的文件位置如图2.2所示。
SpringBootApp.java启动类的代码如下:

图2.2 本项目启动类的文件位置示意图

在该类第6行的main函数中,通过第7行的SpringApplication.run方法启动StarterDemo项目,注意第7行run方法的参数是启动类,即SpringBootApp类的类名。
对于Spring Boot的启动类而言,类名不重要,只需要和第7行run方法中的参数名保持一致即可,但需要如第4行一样,用@SpringBootApplication注解来标识本类是启动类。
从@SpringBootApplication注解的源代码处可以得知,该注解除了能启动Spring Boot项目外,还被如下3个注解所修饰:
· 在之前讲述IoC知识点的范例中,读者已经看到过@Configuration注解的用法。被该注解标识过的类,可以通过@Bean注解向Spring容器中配置类。也就是说,可以在Spring Boot启动类中通过@Bean注解配置本项目所要用到的实例,并把注入实例的控制权交给Spring容器,由此体现“控制反转”的效果。
· 通过@EnableAutoConfiguration注解,在启动Spring Boot项目时,Spring容器会自动读取通过@Bean注解配置好的类,并且还会到本项目classpath所指定的路径中读取配置好的类,同样这些类的注入控制权会交给Spring Boot容器。
· 由于Spring Boot启动类相当于被@ComponentScan注解修饰,因此在运行本启动类启动Spring Boot项目时,Spring容器会扫描本包(这里是Starter包)以及子包下的所有路径,一旦发现有被@Service等注解标识成的类,就会把这些类读取到Spring容器中。这也是把控制器类、业务逻辑类和数据服务层代码所在的包放在和启动类平级或下级包的原因。
2.3.2 配置热部署
在常规情况下,当Spring Boot项目处于运行状态时,如果要更新其中的Java类文件,需要先停止该项目,更新类文件后再启动该项目,这样就能让修改生效。
与之相对应的是“热部署”,即当项目在运行时,更新类文件后,在不重启项目的前提下就能让修改生效。
为了实现“热部署”的效果,需要在pom.xml文件的<dependencies>元素中添加如下第2~6行的代码。

不过这里需要注意,在测试环境中,为了提升调试的效果,可以通过引入上述依赖项开启热部署。但在生产环境中,变更代码和重启服务器需要非常慎重,往往需要比较复杂的审批流程,热部署所带来的优势无法体现出来,所以不建议在生产环境中引入热部署。
2.3.3 通过Banner定制启动信息
Spring Boot项目在启动时会在控制台(或日志文件)输出一些信息。在一些场景中,需要通过Banner定制化启动信息,从而向用户展示一些提示信息。通过Banner定制启动信息的步骤如下:
在2.3.1小节创建的StarterDemo项目中,找到resources目录,在其中新建一个名为banner.txt的文件,具体效果如图2.3所示。在banner.txt文件中可以定义如下信息:

图2.3 在resources目录下创建banner.txt

在第1行输出了本项目的版本信息,在第2行和第3行输出了Spring Boot的版本信息和格式化过的版本信息,而在第4~6行中定义了欢迎文字。
随后再次通过运行SpringBootApp.java启动Spring Boot项目,就能在控制台看到如图2.4所示的启动效果。

图2.4 通过Banner定制启动界面的效果图
从中可以看到定义后的效果,如果要引入其他欢迎或者提示文字,则可以如本范例所示,在banner.txt文件中继续添加其他文字。
2.3.4 关闭定制的启动界面
如果不想在启动时展示通过Banner定制好的信息,那么可以通过改写Spring Boot的启动类来实现,改写后的SpringBootApp.java代码如下:

在第7行的main函数中,需要注释掉第8行原来的代码,加上第9~11行的代码,其中通过第10行的代码关闭了定制化启动信息的效果。修改后再运行该启动类,就能看到如图2.5所示的效果,从中能够确认定制化的启动信息不再生效。

图2.5 关闭定制化启动信息后的效果图