第6章 Spring Boot核心(1)

6.1 基本配置

6.1.1 入口类和@SpringBootApplication

Spring Boot通常会有一个名为*Application的入口类,入口类面有一个main方法,这个main方法其实就是一个标准的Java应用的入口方法.在main方法里使用SpringApplication.run(Application.class, args),启动Spring Boot应用项目

@SpringBootApplication 是Spring Boot的核心注解,它是一个组合注解,源码如下

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
}

@SpringBootApplication 注解组合了@Configuration、@EnableAutoConfiguration、@ComponentScan、若不使用@SpringBootApplication 注解,则可以在入口类上直接使用上述3个注解即可.其中,@EnableAutoConfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置.

例如,添加了spring-boot-starter-web依赖,会自动添加tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和Spring MVC 进行自动配置

Spring Boot会扫描@SpringBootApplication所在类的同级包以及下级包里的Bean(若为JPA项目还可以扫描标注@Entity的实体类).

6.1.2 关闭特定的自动配置

通过上面的@SpringBootApplication的源码我们可以看出,关闭特定的自动配置应该使用execlude参数,例如

@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 生成banner 复制到banner.txt中
(4).启动程序的时候,图案将变成你定义的

2.关闭banner
(1).在main里修改内容为

public static void main(String[] args) {
    SpringApplication app = new SpringApplication(Application.class);
    app.setBannerMode(Banner.Mode.OFF);
    app.run(args);
}

(2)或使用fluent API修改为

public static void main(String[] args) {
   new SpringApplicationBuilder(Application.class).bannerMode(Banner.Mode.OFF).run(args);
}

6.1.4 Spring Boot的配置文件

Spring Boot使用一个全局的配置文件application.properties或application.yml,放置在src/main/resources目录或者类路径的/config下

Spring Boot不仅支持常规的properties配置文件,还支持yaml语言的配置文件.yaml是以数据为中心的语言,在配置数据的时候具有面向对象的特性.

Spring Boot的全局配置文件的作用是对一些默认配置的配置值进行修改

1.简单示例
将Tomcat的端口号8080修改为9090,并将默认的访问路径”/”修改为”/helloboot”
可以在application.properties中添加:

server.port=9090
server.context-path=/helloboot
# 2.0版本以后 server.servlet.context-path=/helloboot 替换了server.context-path=/helloboot

或者在application.yml中添加

server:
    port:9090
    contextPath:/helloboot

从上面的配置可以看出,在SpringBoot中,context-path、contextPath或者CONTEXT-PATH形式上是通用的.并且,yaml的配置更加简洁清晰.目前STS3.7.0已经开始支持yaml语言配置,而IDEA则只针对Spring Boot的properties配置提供了自动提示的功能,且@PropertySource注解也不支持加载yaml文件.在日常开发中,我们习惯于用properties文件来配置,所以目前推荐使用properties进行配置

6.1.5 stater pom

spring boot为我们提供了简化企业级开发绝大多数场景的starter.pom,只要使用了应用场景所需要的starter pom,相关的技术配置将会消除,就可以得到Spring Boot为我们提供的自动配置的Bean
1.官方starter pom
这里写图片描述
这里写图片描述

6.1.6 使用xml配置

Spring Boot提倡零配置,即无xml配置,但是在实际项目中,可能有一些特殊要求你必须使用xml配置,这时我们可以通过Spring提供的@ImportResource来加载xml配置,例如:

@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

6.2 外部配置

Spring Boot允许使用properties文件、yaml文件或者命令行参数作为外部配置

6.2.1 命令行参数配置

Spring Boot可以基于jar包运行,打成jar包程序可以直接通过下面命令运行

java -jar xx.jar

可以通过以下命令修改tomcat端口号

java -jar xx.jar --server.port=9090

6.2.2 常规属性配置

在2.2节我们讲述了常规的Spring环境下,注入properties文件里的值得方式,通过@PropertySource指明properties文件的位置,然后通过@Value注入值.在Spring Boot里,我们只需要在application.properties定义属性,直接使用@Value注入即可
1.实战
在上例的基础上,进行如下的修改
(1)application.properties增加属性:

    @Value("${server.port}")
    private String port;

6.2.3 类型安全的配置(基于properties)

上例中使用@Value注入每个配置在实际项目中会显得格外麻烦,因为我们的配置通常会有许多个,若使用上例的方式则要使用@Value注入很多次

Spring Boot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean及其属性进行关联,从而实现类型安全的配置
1.实战
(1)添加属性到application.properties内

author.name=liumr
author.age=18

当然,我们也可以新建一个properties文件,这就需要我们在@ConfigurationProperties的属性locations里面指定propertis的位置,且需要在入口类上配置
(3)类型安全的Bean,代码如下

@Component
@ConfigurationProperties(prefix = "author")
public class AuthorSettings {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

代码解释
①:通过@ConfigurationProperties加载properties文件内的配置,通过prefix属性指定properties的配置前缀,通过locations指定properties文件的位置:例如

@ConfigurationProperties(prefix = "author",locations={"classpath:config/author.properties"})

本例不需要配置locations,1.5版本以上取消了locations 可以使用@PropertySource当替换方案
(4)检查代码:(直接在控制器中注入此Bean即可)

   @Autowired
   private AuthorSettings authorSettings;

6.3 日志配置

Spring Boot支持java Util Logging、Log4J、Log4J2和Logback作为日志框架,无论使用哪种日志框架,Spring Boot已为当前使用日志框架的控制台输出以及文件输出做好了配置,可对比4.2.2节中没有Spring Boot时日志配置的方式.

默认情况下,Spring Boot使用Logback作为日志框架

logging.file=D:/mylog/log.log
logging.level.org.springframework.web=DEBUG

6.4 Profile配置

Profile是Spring用来针对不同的环境对不同的配置提供支持,全局Profile配置使用application-{profile}.properties(如application-prod.properties)

通过在application.properties中设置spring.profile.active=prod来激活活动的profile

实战:
(1).生产环境和开发环境配置文件名分别如下:
application-prod.properties
application-dev.properties
(2).运行application.properties增加属性(不同的值切换配置文件)

spring.profile.active=dev

6.5 Spring Boot运行原理

我们将在本节先通过分析Spring Boot的运行原理后,根据已掌握的只是自定义一个starter pom.

在3.5章中我们了解到Spring 4.x提供了基于条件来配置Bean的能力,其实Spring Boot的神奇的实现也是基于这一原理的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值