Java程序设计:spring boot(3)——spring boot核心配置

目录

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"

更多⽇志输出,参考官⽹。

上一篇:论文精读:多源域自适应目标检测中的目标相关知识保存(CVPR2022)-6、Conclusion


下一篇:Spring Boot在线考试系统:JavaWeb技术的应用案例