一、入口类和@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启动时会有一个默认启动图案:
(1)修改Banner
在src/main/resources 下新建一个banner.txt
////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////
View Code
也可以去 http://patorjk.com/software/taag/ 在线生成字符,然后将生成的字符复制到banner.txt文件中即可。
(2)关闭Banner
在入口文件Application.java的main方法中,修改为:
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 :
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)在需要使用属性的类中,如入口类:
@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)配置类
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 实战》,汪云飞