[toc]java
从上篇文章中知道@SpringBootApplication
是加载启动类上的一个组合注解,源码定义:web
@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 { //other code... }
能够看到这个注解包含了@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
三个经常使用的注解,他们的做用以下:spring
@Service
、@Repository
、@Component
、@Controller
、@RestController
、@Configuration
等),默认扫描的类都位于当前类所在包的以及子包,所以一般将启动类放在项目根包中SpringBoot完成了大量的自动化配置,可是开发过程当中,不免须要咱们本身定义配置一些信息,好比数据库的配置,所以SpringBoot提供了properties配置,SpringBoot会默认读取application.properties
中的配置信息。 SpringBoot项目中的application.properties
的存放位置以及优先级关系:数据库
application.properties
的配置信息以键值对(key = value)的形式编写:tomcat
server.port=8080 user.name=gongSir user.major=computer user.grade=2017 server.error.path=/error
YAML是JSON的超集,是一种专门用来写配置文件的语言,简介而强大,能够用来替代application.properties。YAML简单易上手,用缩进表示层级关系,区分大小写。 如今改写上文的properties,将文件后缀改为yml,即application.yml
:服务器
server: port: 8080 error: /error user: name: gongSir major: computer grade: 2017
不管是properties仍是yaml配置都会被SpringBoot加载到environment中。spring提供了@Value注解以及EnvironmentAware接口将Spring Environment中的数据注入到bean属性上,demo以下: 首先在pom中引入依赖:session
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
如今来读取上文的user信息,写一个bean:app
@Component //user是前缀 @ConfigurationProperties(prefix = "user") public class User { private String name; private String major; private String grade; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", major='" + major + '\'' + ", grade='" + grade + '\'' + '}'; } }
添加一个/user
接口:ide
@RestController public class HelloController { @GetMapping(path = "/hello") public String hello(){ return "hello spring boot!"; } @Autowired User user; @GetMapping(path = "/user") public String user(){ System.out.println(user); return user.toString(); } }
使用@Autowired注解注入注册的bean信息,而后接口输出信息: 使用@Value注解,修改上述代码:spring-boot
@RestController public class HelloController { @GetMapping(path = "/hello") public String hello(){ return "hello spring boot!"; } @Value("${user.name}") String myName; @Autowired User user; @GetMapping(path = "/user") public String user(){ System.out.println("myName: "+myName); System.out.println(user); return user.toString(); } }
控制台:
在生产开发过程当中,项目上线以前,常常须要切换运行环境,即在开发环境、测试环境、预发布、发布环境以前切换,而这些不一样的环境每每有不一样的配置文件信息,每次都去修改application.properties不免复杂繁琐,SpringBoot提供了很好的解决方案,SpringBoot中约定了不一样环境下配置文件的名称规则为application-{profile}.properties
(YAML同理),profile表示当前环境的名称,具体配置: 一、建立配置文件 假设如今有test和dev两个环境,咱们在resource
下分别建立==application-test.properties==、==application-dev.properties==,分别表示测试环境和开发环境的配置,简单配置: ==application-dev.properties==:
server.port=8080
==application-test.properties==:
server.port=8081
二、修改application.properties
接下来咱们在==application.properties==中配置环境名称便可:
spring.profiles.active=dev
演示test环境启动:
演示dev环境启动:
SpringBoot内置了默认的tomcat服务器,所以不须要特别配置,如需修改tomcat端口等信息,可在上文中的application.properties
文件中配置:
#端口号 server.port=8081 #错误页面 server.error.path=/error #session失效时间 server.servlet.session.timeout=30m #Tomcat的请求编码 server.tomcat.uri-encoding=utf-8
更多配置参考官方文档!
除了Tomcat,SpringBoot也支持嵌入Jetty,配置以下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 取出Tomcat默认项 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 嵌入Jetty服务器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
由于SpringBoot默认在web中内嵌了Tomcat,所以须要从web中去除tomcat,而后加入Jetty依赖便可。 启动项目:
SpringBoot项目启动时会在后台打印一个banner,以下图: 咱们也能够本身定制想要的启动页: 在
resource
目录下新建一个==banner.txt==文件,把想打印的字符保存在这个TXT里面,SpringBoot启动时,就会打印出来: 也能够定制艺术字体,直接去这里定制,而后复制到banner中便可!
本文主要介绍SpringBoot的基础配置,包括启动注解、配置文件、服务器配置等。待续......