二、Spring Boot 基础配置(1)

本章概要

  • 不使用spring-boot-starter-parent
  • @Spring BootApplication
  • 定制banner
  • Web容器配置

2.1 不使用spring-boot-starter-parent

spring-boot-starter-parent主要提供了如下默认配置:

  • Java版本默认使用1.8
  • 编码格式默认使用UTF-8
  • 提供Dependency Management 进行项目依赖的版本管理
  • 默认的资源过滤与插件配置

spring-boot-starter-parent 虽然方便,但公司在开发微服务项目或多模块项目时一般需要使用公司自己的 parent,这个时候如果还想进行项目依赖版本的统一管理,就需要使用depenManagement来实现了。添加如下代码到pom.xml中:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>2.0.4.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

此时就可以不用继承spring-boot-starter-parent了,但是Java的版本、编码的格式等都需要开发者手动配置。Java版本的配置很简单,添加一个plugin即可

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.1</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
  </configuration>
</plugin>

至于编码格式,如果是直接创建的Spring Boot项目,那么编码格式默认会加上;如果是普通Maven项目配置成的Spring Boot项目,那么在pom.xml文件中加入如下配置:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
</properties>

2.2 @Spring BootApplication

@Spring BootApplication 实际上是一个组合注解,定义如下:

//@SpringBootApplication
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @ComponentScan.Filter(type = FilterType.CUSTOM , classes = TypeExcludeFilter.class),
        @ComponentScan.Filter(type = FilterType.CUSTOM,classes = AutoConfigurationExcludeFilter.class)
})
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

这个注解由三个注解组成
①第一个@SpringBootConfiguration的定义如下:

@Configuration
public @interface SpringBootConfiguration {
}

原来就是一个@Configuration,所以@SpringBootConfiguration的功能就是表名这是一个配置类,开发者可以在这个类中配置Bean。从这个角度来讲,这个类所扮演的角色有点类似于Spring中applicationContext.xml文件的角色。
②第二个注解@EnableAutoConfiguration表示开启自动化配置。Spring Boot中的自动化配置是非侵入式的,在任意时刻,开发者都可以使用自定义配置代替自动化配置中的某一个配置。
③第三个注解@ComponentScan完成包扫描,也是Spring中的功能。由于@ComponentScan注解默认扫描的类都位于当前类所在的包的下面,因此建议在实际项目开发中把项目启动类放在根包中,如图:
在这里插入图片描述

虽然项目的启动类也包含@Configuration 注解,但是开发者可以创建一个新的类专门用来配置Bean,这样便于配置管理。这个类只需要加上@Configuration 注解即可,如下:

@Configuration
public class MyConfig {
}

项目启动类中的@ComponentScan 注解,除了扫描@service、@Repository、@Component、@Controller和@RestController等之外,也会扫描@Configuration注解的类

2.3 定制banner

Spring Boot项目在启动时会打印一个banner,如图
![image.png](https://img-blog.csdnimg.cn/img_convert/cf55f9e52e177e8018842efd790c5f2e.png#clientId=ufa88e1ca-2cd8-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=212&id=uca0afd3b&margin=[object Object]&name=image.png&originHeight=212&originWidth=656&originalType=binary&ratio=1&rotation=0&showTitle=false&size=9553&status=done&style=none&taskId=uec8169f9-94b8-4cb4-b216-e2620595908&title=&width=656)
这个banner是可以定制,在resources目录下创建一个banner.txt文件,文件的内容将会被打印出来,艺术字体生成网址:

  • http://www.network-science.de/ascii/
  • http://www.kammerl.de/ascii/AsciiSingnature.php
  • http://patorjk.com/software/taag

也可以配置关闭banner,修改项目启动类的main方法,代码如下:

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplicationBuilder builder = new SpringApplicationBuilder(App.class);
        builder.bannerMode(Banner.Mode.OFF).run(args);
    }
}

2.4 Web容器配置

2.4.1 Tomcat配置

1. 常规配置

在Spring Boot 项目中,可以内置Tomcat、Jetty、Undertow、Netty等容器。当开发者添加了spring-boot-web依赖后,默认会使用Tomcat作为Web容器。如果需要对Tomcat 做进一步的配置,可以在application.properties中进行配置,代码如下:

server.port=8081
server.error.path=/error
server.servlet.session.timeout=30m
server.servlet.context-path=chapter01
server.tomcat.uri-encoding=utf-8
server.tomcat.max-threads=500
server.tomcat.basedir=E:/Gitee/my-work-space/chapter01/tmp
代码解释:
  • server.port 配置了Web容器的端口号
  • error.path配置了当项目出错时跳转去的页面
  • session.timeout配置了session失效时间,30m标识30分钟,如果不写单位,默认单位是秒。由于Tomcat中配置session 过期时间以分钟为单位,因此这里单位如果是秒的话,该时间会被转换为一个不超过所配置秒数的最大分钟数,例如这里配置了119,默认单位为秒,则实际session过期时间为1分钟
  • context-path表示项目名称,不配置默认为/,如果配置了,就要在访问路径中加上配置的路径。
  • uri-encoding 表示配置Tomcat请求编码
  • max-threads 标识Tomcat最大线程数
  • basedir 是一个存放Tomcat运行日志和临时文件的目录,若不配置,则默认使用系统的临时目录

当然,Web容器相关的配置不止这些,这里只列举了一些常用的配置,完整的配置可以参考官方文档Appendix A. Common application properties一节

2. HTTPS配置

由于HTTPS具有良好的安全性,在开发中得到了越来越广泛的应用,像微信公众号、小程序等的开发都要使用HTTPS完成。对于个人开发者面前,一个HTTPS证书的价格还是有点贵,国内有一些云服务器厂商提供免费的HTTPS证书,一个账号可以申请数个。不过在jkd中提供了一个Java数字证书管理工具keytool,在\jdk\bin目录下,通过这个工具可以自己生成一个数字整数,生成命令如下:

keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore E:/Gitee/my-work-space/chapter01/sang.p12 -validity 365

在这里插入图片描述

注意:如果生成的文件路径在c盘可能会出现异常,如下
在这里插入图片描述

命令解释:

  • -genkey 表示要创建一个新的秘钥
  • -alias 表示keystore 的别名
  • -keyalg 表示使用给的加密算法是RSA,一种非对称加密算法
  • -keysize 表示秘钥的长度
  • -keystore 表示生成的秘钥存放位置
  • -validity 标识秘钥的有效时间,单位为天

在cmd命令窗口中执行如上命令,在执行的过程中需要输入秘钥口令等信息,根据提示输入即可。命令执行完成后,会在当前用户目录下生成一个名为sang.p12 的文件,将这个文件复制到项目的根目录下,然后在application.properties 中做如下配置:

server.ssl.key-store=sang.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=123123

代码解释:

  • key-store 表示秘钥文件名
  • key-alias 表示秘钥别名
  • key-store-password 就是在cmd命令执行过程中输入的密码

配置成功后,启动项目,在浏览器中输入“https:/localhost:8081/chapter01/hello”来查看结果。注意证书是自己生成的,不被浏览器认可,此时添加信任或继续前进即可,如图:
在这里插入图片描述

成功运行的结果,如图
在这里插入图片描述

此时如果以HTTP的方式访问接口,就会访问失败,如图
在这里插入图片描述

这是因为Spring Boot 不支持同时在配置中启动HTTP和HTTPS 。这个时候可以配置请求重定向,将HTTP请求重定向为HTTPS 请求。配置如下:

@Configuration
public class TomcatConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory(){
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){
            @Override
            protected void postProcessContext (Context context){
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }

    private Connector createTomcatConnector(){
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080);
        connector.setSecure(false);
        connector.setRedirectPort(8081);
        return connector;
    }
}

这里首先配置一个TomcatServletWebServerFactory ,然后添加一个Tomcat中的Connector(监听8080端口),并将请求转发到8081上去。配置完成后,在浏览器中输入"http:/localhost:8080/chapter01/hello",就会自动重定向到"https:/localhost:8081/chapter01/hello"上。

2.4.2 Jetty配置

除了Tomcat外,也可以在Spring Boot 中嵌入Jetty ,配置方式如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--    Jetty配置    -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

主要是从spring-boot-starter-web中除去默认的Tomcat,然后加入Jetty依赖即可。此时启动项目,查看启动日志,如图:
在这里插入图片描述

2.4.3 Undertow 配置

Undertow 是一个红帽公司开源的Java服务器,具有非常好的性能,在Spring Boot 中也得到了很好的支持,配置方式与Jetty类似,代码如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

启动后查看日志,如图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小熊猫呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值