目录
1 设置 Banner 图标
1.1 Banner 图标⾃定义
1.2 Banner 图标关闭
2 Spring Boot 配置⽂件
3 Starter 坐标 & ⾃动化配置
3.1 Starter坐标配置
3.1.1 Web starter
3.1.2 Freemarker Starter & Thymeleaf starter
3.1.3 JavaMail邮件发送 Starter
3.1.4 引⼊AOP环境
3.2 自动化配置
3.2.1 SpringBoot Starter坐标版本查看
3.2.2 Spring Boot⾃动化配置
4 Profile 配置
5 日志配置
5.1 项目中日志信息输出
5.2 日志输出格式配置
1 设置 Banner 图标
在搭建 Spring Boot 项⽬环境时,程序启动后会在控制台打印醒⽬的 SpringBoot 图标,图标描述了 Spring Boot 版本信息,这是 Spring Boot 项⽬与 Spring 项⽬启动区别较⼤的地⽅,Spring Boot 通过 默认 Banner 在程序启动时显示应⽤启动图标,当然图标我们也可以进⾏⾃定义。
1.1 Banner 图标⾃定义
Spring Boot 项⽬启动时默认加载 src/main/resources ⽬录下的 banner.txt 图标⽂件,如果该⽬录 ⽂件未提供,则使⽤ Spring Boot 默认。在 main ⽬录下新建 resources 资源⽬录,并在该⽬录下新建 banner.txt ⽂本⽂件,可以设置⾃定义图标。
打开⽹址: http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something
在线⽣成图标对应⽂本并将⽂本内容copy 到 banner.txt 中
启动Spring Boot 应⽤打印如下:
1.2 Banner 图标关闭
如果启动时不想要看到启动图标 ,这⾥也可以通过代码进⾏关闭操作,修改 Starter Application设置 BannerMode 值为 Banner.Mode.OFF,启动 Spring Boot 应⽤关闭图标输出功能即可
@SpringBootApplication
public class StarterApplication {
public static void main(String[] args) {
SpringApplication springApplication = new
SpringApplication(StarterApplication .class);
// 设置 banner 图标关闭
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run();
}
}
2 Spring Boot 配置⽂件
Spring Boot 默认会读取全局配置⽂件,配置⽂件名固定为:application.properties 或 application.yml,放置在 src/main/resources 资源⽬录下,使⽤配置⽂件来修改 SpringBoot ⾃动配置 的默认值。
在 resources 资源⽬录下添加 application.properties ⽂件,配置信息如下:
## 项⽬启动端⼝号配置
server.port=8989
## 项⽬访问上下⽂路径
server.servlet.context-path=/mvc
## 数据源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/hr?
useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
或者 application.yml ⽂件:
## 端⼝号 上下⽂路径
server:
port: 8989
servlet:
context-path: /mvc
## 数据源配置
spring:
datasource:
type: com.mchange.v2.c3p0.ComboPooledDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/hr
username: root
password: root
3 Starter 坐标 & ⾃动化配置
3.1 Starter坐标配置
Spring Boot 引⼊了全新的Starter坐标体系,简化企业项⽬开发⼤部分场景的 Starter pom,应⽤程 序引⼊指定场景的 Start pom 相关配置就可以消除 ,通过 Spring Boot 就可以得到⾃动配置的 Bean。
3.1.1 Web starter
使⽤ Spring MVC 来构建 RESTful Web 应⽤,并使⽤ Tomcat 作为默认内嵌容器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.1.2 Freemarker Starter & Thymeleaf starter
集成视图技术,引⼊ Freemarker Starter , Thymeleaf Starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
3.1.3 JavaMail邮件发送 Starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3.1.4 引⼊AOP环境
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
相关starter系列坐标参考:
传统的 maven 坐标这⾥同样适⽤,如果引⼊传统 maven 坐标需要考虑相关配置类的编写。
如果引⼊相关starter坐标这⾥不存在,可以到这里搜索。
3.2 自动化配置
3.2.1 SpringBoot Starter坐标版本查看
前⾯介绍了 SpringBoot Starter 相关坐标,引⼊ Starter 坐标来简化应⽤环境的配置。这⾥以环境搭 建 spring-boot-starter-web 坐标来简单分析 SpringBoot ⾃动化配置过程。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
这⾥引⼊的 web 环境坐标不像传统的maven坐标那样包含坐标的版本号,项⽬中引⼊的 starter 系列 坐标对应的版本库统⼀由⽗⼯程坐标统⼀控制即项⽬中引⼊的 parent 标签。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<!--
⽗类项⽬统⼀对项⽬依赖版本统⼀控制!
-->
<version>2.2.2.RELEASE</version>
</parent>
这⾥ spring-boot-starter-parent 继承 spring-boot-dependencies 项⽬,在 spring-bootdependencies 项⽬中定义了 spring-boot-starter-web 坐标的版本!(spring-boot-dependencies 项 ⽬中定义了当前 SpringBoot版本下各个 starter 坐标版本以及依赖的其他坐标版本)
3.2.2 Spring Boot⾃动化配置
Spring Boot的项⽬⼀般都会有 *Application 的⼊⼝类,⼊⼝类中提供 main ⽅法,这是⼀个标准的 Java 应⽤程序的⼊⼝⽅法。@SpringBootApplication 注解是 Spring Boot 的核⼼注解,它其实是⼀个组合注解:
@SpringBootApplication
可以看出该注解也是⼀个组合注解,组合了 @Configuration 注解,对于Spring Boot应⽤, @SpringBootConfiguration 注解属于Boot 项⽬的配置注解也是属于⼀个组合注解,Spring Boot 项⽬ 中推荐使⽤@SpringBootConfiguration 注解,因为其组合了 @Configuration 注解。
@EnableAutoConfiguration
@EnableAutoConfiguration 注解组合了 @AutoConfigurationPackage、 @Import(Auto ConfigurationImportSelector.class) 注解。
@AutoConfigurationPackage 底层也是⼀个 @Import(AutoConfigurationPackages.Registrar. class),其会把启动类的包下组件都扫描到Spring容 器中。
@Import(AutoConfigurationImportSelector.class) ⾃动配置的核⼼类 AutoConfigurationImport Selector.class,该类导⼊⼤量的⾃动配置类,debug可以发现,其读取的是 classpath下的 META-INF/spring.factories 下配置⽂件。
以 WebMvcAutoConfiguration 为例,可以看出该类使⽤ @Configuration 注解进⾏标注其为⼀个配 置类。
当然 spring.factories ⽂件中配置类默认不会都⽣效,具体哪些配置类⽣效由配置类上标注的 @ConditionalOnClass 注解来决定,这⾥了解下 @ConditionalOnClass 注解含义。
@ConditionalOnBean // 当给定的在bean存在时,则实例化当前Bean
@ConditionalOnMissingBean // 当给定的在bean不存在时,则实例化当前Bean
@ConditionalOnClass // 当给定的类名在类路径上存在,则实例化当前Bean
@ConditionalOnMissingClass // 当给定的类名在类路径上不存在,则实例化当前Bean
意味着 WebMvcAutoConfiguration 配置类⽣效需要环境中存在 Servlet.class, Dispatcher Servlet.class,WebMvcConfigurer.class 实例,配置类才会⽣效。
从以上分析可以得出如下结论:
Spring Boot 通过 maven 中的 starter 导⼊了所需场景下的 jar 包,并通过主启动类上的 @Spr ingBootApplication 中的 @EnableAutoConfiguration 读取了类路径下的 METAINF/spring.factori es下 EnableAutoConfiguration 的配置类,这些配置类使⽤ @ConditionalOnClass 来标注,根据@ConditionalOnClass 标注的约束条件来引⼊⾃动化的环境配置。
4 Profile 配置
Profile 是 Spring ⽤来针对不同环境对不同配置提供⽀持的全局 Profile 配置使⽤ application- {profile}.yml,⽐如 application-dev.yml ,application-test.yml。
通过在 application.yml 中设置 spring.profiles.active=test|dev|prod 来动态切换不同环境,具体配置 如下:
application-dev.yml 开发环境配置⽂件:
server:
port: 8989
application-test.yml 测试环境配置⽂件:
server:
port: 9999
application-prod.yml ⽣产环境配置⽂件:
server:
port: 8686
application.yml 主配置⽂件:
## 环境选择配置
spring:
profiles:
active: dev
启动Starter 查看控制台输⼊效果:
修改 application.yml 设置 active 值为 prod:
## 环境选择配置
spring:
profiles:
active: prod
启动Starter 再次查看控制台输⼊效果:
5 日志配置
在开发企业项⽬时,⽇志的输出对于系统 bug 定位⽆疑是⼀种⽐较有效的⽅式,也是项⽬后续进⼊⽣ 产环境后快速发现错误解决错误的⼀种有效⼿段,所以⽇志的使⽤对于项⽬也是⽐较重要的⼀块功能。
Spring Boot 默认使⽤ LogBack ⽇志系统,如果不需要更改为其他⽇志系统如 Log4j2 等,则⽆需多 余的配置,LogBack 默认将⽇志打印到控制台上。如果要使⽤ LogBack,原则上是需要添加 dependency 依赖的。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
因为新建的 Spring Boot 项⽬⼀般都会引⽤ spring-boot-starter 或者 spring-boot-starterweb ,⽽这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,⽆需额 外添加依赖。
5.1 项目中日志信息输出
Starter 启动类中添加 Log ⽇志类,控制台打印⽇志信息。
package com.xxxx;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Starter {
private static Logger logger = LoggerFactory.getLogger(Starter.class);
6.5.2. ⽇志输出格式配置
修改 application.yml ⽂件添加⽇志输出格式信息配置,可以修改 application.yml ⽂件来控制控制台
⽇志输出格式,同时可以设置⽇志信息输出到外部⽂件。
更多⽇志输出,参考官⽹
7. Freemarker & Thymeleaf 视图技术集成
7.1. Freemarker 视图集成
public static void main(String[] args) {
logger.info("SpringBoot 应⽤开始启动...");
SpringApplication.run(Starter.class);
}
}
5.2 日志输出格式配置
修改 application.yml ⽂件添加⽇志输出格式信息配置,可以修改 application.yml ⽂件来控制控制台 ⽇志输出格式,同时可以设置⽇志信息输出到外部⽂件。
logging:
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger- %msg%n"
level: debug
file:
path: "."
name: "springboot.log"
更多⽇志输出,参考官⽹。