6.1.1 入口类和@SpringBootApplication
Spring Boot 通常有一个名为*Application的入口类,入口类里有一个main方法,这个main方法其实就是一个标准的Java应用的入口方法。在main方法中使用SpringApplication.run(Ch522Application.class,args)启动Spring Boot应用项目。
@SpringBootApplication是Spring Boot的核心注解,它是一个组合注解,源码如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@AliasFor(annotation = EnableAutoConfiguration.class)
Class<?>[] exclude() default {};
@AliasFor(annotation = EnableAutoConfiguration.class)
String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
}
@SpringBootApplication注解主要组合了@Configuration、@EnableAutoConfiguration、@ComponentScan:若不使用@SpringBootApplication注解,则可以在入口类上直接使用@Configuration、@EnableAutoConfiguration、@ComponentScan。
其中,@EnableAutoConfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。
例如,添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和Spring MVC进行自动配置。
又如,添加了spring-boot-starter-data-jpa依赖,Spring Boot会自动进行JPA相关的配置。以及下级包里的Bean(若为JPA项目还可以扫描标注@Entity的实体类)。建议入口类放置的位置在groupId+arctifactID组合的包名下。
6.1.2 关闭特定的自动配置
通过上面的@SpringBootApplication的源码我们可以看出,关闭特定的自动配置应该使用@SpringBootApplication注解的exclude参数,例如:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
6.1.3 定制Banner
1.修改Banner
(1)在Spring Boot启动的时候会有一个默认启动图案,如图
(2)我们在 src/main/resources下新建一个banner.txt。
(3)通过 http://patorjk.com/software/taag网站生成字符,如敲入的为 ADMIN,将网站生成的字符复制到banner.txt中。
(4)这时在启动程序,图案将变为如图
6.1.4 Spring Boot 的配置文件
Spring Boot 不仅支持常规的properties配置文件,还支持yaml语言的配置文件。yaml是以数据为中心的语言,在配置数据的时候具有面向对象的特征。
Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。
1.简单示例
将Tomcat的默认端口号修改为9090,并将默认的访问路径“/”修改为“/helloboot”,
可以在application.properties中添加:
server.port=9090
server.context-path=/helloboot
或在application.yml中添加:
server:
port:9090
contextPath:/helloboot
从上面的配置可以看出,在Spring Boot中,context-path、contextPath或者CONTEXT_PATH形式其实是通用的。并且,yaml的配置更简洁清晰。目前STS 3.7.0已开始支持yaml语言配置,而IntelliJ IDEA 则只对Spring Boot 的 properties配置提供了自动提示的功能,且@PropertySource注解也不支持加载yaml文件。在日常开发中,我们习惯于用properties文件来配置,所以目前 推荐使用properties进行配置。
6.1.5 starter pom
Spring Boot 为我们提供了简化企业级开发绝大多数场景的starter pom,只 要使用了应用场景所需要的starter pom,相关的技术配置将会消除,就可以得到Spring Boot为我们提供的自动配置的Bean。
1.官方Starter pom
Spring Boot提供了如下所示的starter pom。
spring-boot-starter springboot核心starter ,包括自动配置,日志,yaml配置文件的支持
spring-boot-starter-actuator 准生产特性,用来监控和管理应用
spring-boot-starter-remote-shell 提供基于ssh协议的监控和管理
spring-boot-starter-amqp 使用spring-rabbit支持AMQP
spring-boot-starter-aop 使用AOP和AspectJ支持面向切面编程
spring-boot-starter-batch 对springBatch支持
spring-boot-starter-cache 对SpringCache抽象的支持
spring-boot-starter-cloud-connectors 对云平台(Cloud Foundry ,Heroku)提供的服务简化的连接方式
spring-boot-starter-data-elasticsearch 对spring-data-elasticsearch的支持
spring-boot-starter-data-gemfire 对分布式存储GemFire的支持
spring-boot-starter-data-jpa 对jpa的支持,包括spring-data-jap,spring-orm,Hibernate
spring-boot-starter-data-mongodb 通过spring-data-mongodb对mongodb的支持
spring-boot-starter-data-rest 通过spring-data-rest-webmvc对spring Data reposity暴露为REST形式的服务
spring-boot-starter-data-solr 通过spring-data-solr对Apache Solr的支持
spring-boot-starter-data-freemaker 对Freemaker的支持
spring-boot-starter-data-groovy-templates 对Groovy模版引擎的支持
spring-boot-starter-hateoas 通过spring-hateoas对基于HATEOAS的REST形式的网络服务的支持
spring-boot-starter-hornetq 通过HornetQ对JMS的支持
spring-boot-starter-integration 对系统集成框架spring-integration的支持
spring-boot-starter-jdbc 对JDBC数据库的支持
spring-boot-starter-jersey 对Jersey REST形式的网络服务的支持
spring-boot-starter-jta-atomikos 通过Atomikos对分布式事物的支持
spring-boot-starter-jta-bitronix 通过Bitronix对分布式事物的支持
spring-boot-starter-mail 对spring mail的支持
spring-boot-starter-mobile 对spring mobile的支持
spring-boot-starter-mustache 对Mustache模版引擎的支持
spring-boot-starter-redis 对键值对内存数据库Redis的支持,包含spring-redis
spring-boot-starter-security 对spring-security的支持
spring-boot-starter-social-facebook 通过spring-social-facebook 对facebook的支持
spring-boot-starter-social-twitter 通过spring-social-twitter 对twitter的支持
spring-boot-starter-social-linkedin 通过spring-social-linkedin 对linkedin的支持
spring-boot-starter-thymeleaf 对Thymeleaf模版引擎的支持,包含于spring的整合配置
spring-boot-starter-velocity 对velocity模版引擎的支持
spring-boot-starter-web 对web项目开发的支持,包含tomcat和spring-webmvc
spring-boot-starter-Tomcat springboot默认容器tomcat
spring-boot-starter-Jetty jetty容器
spring-boot-starter-undertow Undertow容器
spring-boot-starter-logging 默认日志输出框架Logback
spring-boot-starter-log4j 支持log4j
spring-boot-starter-websocket websocket的支持
spring-boot-starter-ws
spring webservice的支持
2.第三方starter pom
除官方的starter pom 外,还有第三方为Spring Boot所写的starter pom,不多介绍。
6.1.6 使用xml配置
Spring Boot提倡零配置,即无xml配置,但是在实际项目中,可能有一些特殊要求你必须使用xml配置,这时我们可以通过Spring提供的@ImportResource来加载xml配置,例如:
@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})