目录
从上篇文章中知道@SpringBootApplication是加载启动类上的一个组合注解,源码定义:
@SpringBootApplication
@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...}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
//other code...
}
可以看到这个注解包含了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个常用的注解,他们的作用如下:
@ComponentScan
@ComponentScan 对包进行扫描(注解@Service、@Repository、@Component、@Controller、@RestController、@Configuration等),默认扫描的类都位于当前类所在包的以及子包,因此通常将启动类放在项目根包中
@Service
@Repository
@Component
@Controller
@RestController
@Configuration
application.properties
4、classpath下
application.properties的配置信息以键值对(key = value)的形式编写:
server.port=8080user.name=gongSiruser.major=computeruser.grade=2017server.error.path=/error
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:
application.yml
server: port: 8080 error: /erroruser: name: gongSir major: computer grade: 2017
server:
port: 8080
error: /error
user:
name: gongSir
major: computer
grade: 2017
无论是properties还是yaml配置都会被SpringBoot加载到environment中。spring提供了@Value注解以及EnvironmentAware接口将Spring Environment中的数据注入到bean属性上,demo如下: 首先在pom中引入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional></dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
现在来读取上文的user信息,写一个bean:
@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是前缀
@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接口:
/user
@RestControllerpublic 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(); }}
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注解,修改上述代码:
@RestControllerpublic 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(); }}
@Value("${user.name}")
String myName;
System.out.println("myName: "+myName);
控制台:
在生产开发过程中,项目上线之前,经常需要切换运行环境,即在开发环境、测试环境、预发布、发布环境之前切换,而这些不同的环境往往有不同的配置文件信息,每次都去修改application.properties难免复杂繁琐,SpringBoot提供了很好的解决方案,SpringBoot中约定了不同环境下配置文件的名称规则为application-{profile}.properties(YAML同理),profile表示当前环境的名称,具体配置: 1、创建配置文件 假设现在有test和dev两个环境,我们在resource下分别创建==application-test.properties==、==application-dev.properties==,分别表示测试环境和开发环境的配置,简单配置: ==application-dev.properties==:
application-{profile}.properties
resource
==application-test.properties==:
server.port=8081
2、修改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
#端口号
#错误页面
#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>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 取出Tomcat默认项 -->
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
<!-- 嵌入Jetty服务器 -->
<artifactId>spring-boot-starter-jetty</artifactId>
因为SpringBoot默认在web中内嵌了Tomcat,因此需要从web中去除tomcat,然后加入Jetty依赖即可。 启动项目:
SpringBoot项目启动时会在后台打印一个banner,如下图: 我们也可以自己定制想要的启动页: 在resource目录下新建一个==banner.txt==文件,把想打印的字符保存在这个TXT里面,SpringBoot启动时,就会打印出来: 也可以定制艺术字体,直接去这里定制,然后复制到banner中即可!
本文主要介绍SpringBoot的基础配置,包括启动注解、配置文件、服务器配置等。待续......
原文链接:http://www.cnblogs.com/gongsir/p/11637350.html
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728