一、入口类和@SpringBootApplication

SpringBoot项目通常有一个名为*Application的入口类,入口方法为此类的main方法。

 

1. @SpringBootApplication

@SpringBootApplication注解是一个组合注解,主要组合了一下注解:

(1)@Configuration : 声明当前类是一个配置类,相当于一个Spring配置的xml文件。意味着这个类里可能有0个或者多个@Bean注解。

(2)@EnableAutoConfiguration : 让SpringBoot根据类路径中的jar包依赖为当前项目进行自动配置。

(3)@ComponentScan:设置bean扫描的包。

@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

 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration

 

因此,若不使用@SpringBoot注解,则可以在入口类上直接使用这个三个注解。

SpringBoot会自动扫描入口类所在的同级包以及下级包里的bean。

 

2.关闭特定的自动配置

通过@SpringBootApplication注解的参数exclude参数实现:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

 

3.定制Banner

在SpringBoot启动时会有一个默认启动图案:

spring boot配置context_jar包

 

 (1)修改Banner

在src/main/resources 下新建一个banner.txt

spring boot配置context_配置文件_02

spring boot配置context_spring_03

////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                    //
////////////////////////////////////////////////////////////////////

View Code

也可以去 http://patorjk.com/software/taag/ 在线生成字符,然后将生成的字符复制到banner.txt文件中即可。

 

 (2)关闭Banner

在入口文件Application.java的main方法中,修改为:

spring boot配置context_配置文件_02

spring boot配置context_spring_03

SpringApplication application = new SpringApplication(Application.class);
        application.setBannerMode(Banner.Mode.OFF);
        application.run(args);

View Code

 

4.使用xml配置

SpringBoot提倡零配置,即无XML配置,但实际上有些特殊的配置需要使用XML配置。我们可以通过Spring提供的@ImportResource来加载XML配置

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

 

 二、基本配置

1.默认配置文件

SpringBoot默认的配置文件名称为 application.properties,

默认搜索路径为:

file:./                     // 当前目录下的/config子目录,
file:./config/              // 当前目录
classpath:/                 // classpath根路径

classpath:/config/          //classpath下的/config目录

加载顺序按优先级排序的(列表中位置高的将覆盖位置低的)。

注:Spring-boot配置文件的加载,

先在与jar同级下查找,

如果没有就去同级的config下查找;

如果再没有,就在jar包中去查找相应的配置文件,

如果再没有,就去jar包中的config下去查找。当查找到对应配置片段时,采用增量替换的方式来进行替换。

 

 

具体可见源码 ConfigFileApplicationListener :

spring boot配置context_配置文件_06

 

 

2.profile

Profile为在不同环境下使用不同的配置提供了支持(如开发环境和生成环境下数据库的配置)

 若启用dev开发环境配置,则需要在application.properties配置文件中,配置以下属性

spring.profiles.active=dev

则,SpringBoot除了加载application.properties配置文件外,还会加载开发环境的application-dev.properties配置文件,如下:

# Mysql 注意替换相应配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/smart-blog
spring.datasource.username=root
spring.datasource.password=root

 

3.server

(1)端口

server.port=9090

 

(2)应用名

server.servlet.context-path=/weixin-service。

 

 

三、外部配置

1.命令行参数配置

SpringBoot可以基于jar包运行,打成jar包的程序可以直接通过下面的命令行运行,并修改Tomcat端口号:

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

 

2.常规属性配置

即@Value方式

(1)在application.properties中增加属性:

book.author=wangyunfei

      book.name=Spring.boot

 

(2)在需要使用属性的类中,如入口类:

spring boot配置context_配置文件_02

spring boot配置context_spring_03

@RestController
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class Application {

    @Value("${book.author}")
    private String bookAuthor;

    @Value("${book.name}")
    private String bookName;

    @RequestMapping("/")
    public String index() {
        return "book author is:" +  bookAuthor+ "  and book name is:   " + bookName ;
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

View Code

 

3.类型安全的配置

即基于properties

@Value需要将属性一个一个的注入,当属性较多时,会比较麻烦。这时就可以通过 @ConfigurationProperties将properties 属性和一个Bean及其属性关联,从而实现安全配置。

(1)application.properties配置文件

在application.yml上添加(这里以yml格式为例),:

#微信公众平台配置
weixin:
    qy:
       corpId: ww92f5da92234696e
       agentSecret: I73733ve233s6H_ijPvIjYD4Rese5UlbYhhQOEE1-I
       contactsSecret: 1m_9XP62YrXjSiYtL5Th323rqaExKfr_5eAL09w
       agentId: 1000002
       token: ray
       encodingAesKey: z2W9lyOAR1XjY8m2323qib0TlBZzCFiCLp6IdS2Iv
       state: hec4

我们也可以新建一个yml文件,这时我们需要使用@PropertiesSource将添加的文件的位置指定。

 

(2)配置类

spring boot配置context_配置文件_02

spring boot配置context_spring_03

package com.ray.weixin.qy.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author : shira
 * @date : 2018/4/17
 * @time : 22:33
 * @desc :
 **/
@Data
@Component
@ConfigurationProperties(prefix = "weixin.qy")
public class WeiXinAuthConfig {
    private String corpId;
    private String agentSecret;
    private String contactsSecret;
    private int agentId;
    private String token;
    private String encodingAesKey;
    private String state;


}

View Code

 

通过 @ConfigurationProperties 加载文件内的配置,通过prefix属性指定properties的配置的前缀。

 

然后在需要用的配置信息的时候,直接注入这个类就可以了。

 

 

 

四、参考资料

1.《Java EE 开发的颠覆者—SpringBoot 实战》,汪云飞