2.1 @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...
}

可以看到这个注解包含了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan三个常用的注解,他们的作用如下:

  • @SpringBootConfiguration 其实质就是一个@Configuration,表示被注解的类是一个配置类,developer可以在该类中配置Bean
  • EnableAutoConfiguration 表示开启自动化配置
  • @ComponentScan 对包进行扫描(注解@Service@Repository@Component@Controller@RestController@Configuration等),默认扫描的类都位于当前类所在包的以及子包,因此通常将启动类放在项目根包中

2.2 SpringBoot配置文件

2.2.1 Properties配置

SpringBoot完成了大量的自动化配置,但是开发过程中,难免需要我们自己定义配置一些信息,比如数据库的配置,因此SpringBoot提供了properties配置,SpringBoot会默认读取application.properties中的配置信息。

SpringBoot项目中的application.properties的存放位置以及优先级关系:

  • 1、项目根目录的config目录下
  • 2、项目根目录下
  • 3、classpath:/config目录下
  • 4、classpath下

application.properties的配置信息以键值对(key = value)的形式编写:

server.port=8080
user.name=gongSir
user.major=computer
user.grade=2017
server.error.path=/error

2.2.2 YAML配置

YAML是JSON的超集,是一种专门用来写配置文件的语言,简介而强大,可以用来替代application.properties。YAML简单易上手,用缩进表示层级关系,区分大小写。

现在改写上文的properties,将文件后缀改成yml,即application.yml:

server:
port: 8080
error: /error user:
name: gongSir
major: computer
grade: 2017

2.2.3 读取配置文件中的自定义信息

无论是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>

现在来读取上文的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接口:

@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注解,修改上述代码:

@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();
}
}

控制台:

2.2.4 profile切换运行环境

在生产开发过程中,项目上线之前,经常需要切换运行环境,即在开发环境、测试环境、预发布、发布环境之前切换,而这些不同的环境往往有不同的配置文件信息,每次都去修改application.properties难免复杂繁琐,SpringBoot提供了很好的解决方案,SpringBoot中约定了不同环境下配置文件的名称规则为application-{profile}.properties(YAML同理),profile表示当前环境的名称,具体配置:

1、创建配置文件

假设现在有test和dev两个环境,我们在resource下分别创建application-test.properties、application-dev.properties,分别表示测试环境和开发环境的配置,简单配置:

application-dev.properties:

server.port=8080

application-test.properties:

server.port=8081

2、修改application.properties

接下来我们在application.properties中配置环境名称即可:

spring.profiles.active=dev

演示test环境启动:





演示dev环境启动:



2.3 服务器配置

2.3.1 Tomcat配置

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

更多配置参考官方文档!

2.3.2 Jetty配置

除了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依赖即可。

启动项目:

2.4 修改启动banner

SpringBoot项目启动时会在后台打印一个banner,如下图:



我们也可以自己定制想要的启动页:

resource目录下新建一个banner.txt文件,把想打印的字符保存在这个TXT里面,SpringBoot启动时,就会打印出来:



也可以定制艺术字体,直接去这里定制,然后复制到banner中即可!



小结

本文主要介绍SpringBoot的基础配置,包括启动注解、配置文件、服务器配置等。待续......

二、SpringBoot基础配置的更多相关文章

  1. Hibernate游记——装备篇《二》(基础配置示例)

    <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

  2. springboot基础配置-->Properties配置

    Spring Boot项目中的application.properties配置文件一共可以出现在如下4个位置: 项目根目录下的config文件夹中. 项目根目录下. classpath下的config ...

  3. DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描

    DB数据源之SpringBoot+MyBatis踏坑过程(二)手工配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许进制转载  吐槽之后应该有所改了,该方式可以作为一种过渡方式 ...

  4. Emacs学习心得之 基础配置

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...

  5. (二)SpringBoot基础篇- 静态资源的访问及Thymeleaf模板引擎的使用

    一.描述 在应用系统开发的过程中,不可避免的需要使用静态资源(浏览器看的懂,他可以有变量,例:HTML页面,css样式文件,文本,属性文件,图片等): 并且SpringBoot内置了Thymeleaf ...

  6. SpringBoot 基础(二)

    目录 SpringBoot基础(二) 一.操作数据库 1. SpringBootJdbc 2. SpringBoot 整合 Mybatis 3. SpringBott 使用JPA 二.使用 Thyme ...

  7. 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)

    [SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...

  8. SpringBoot基础系列-SpringBoot配置

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9990680.html SpringBoot基础系列-SpringBoot配置 概述 属性 ...

  9. HAProxy详解(二):HAProxy基础配置与应用实例

    一.HAProxy基础配置与应用实例: 1.快速安装HAProxy集群软件: HAProxy的官网: https://www.haproxy.org/#down下载HAProxy的源码包. 安装: [ ...

随机推荐

  1. 简易配置中心Confd入手

    改成动态更新配置文件,如下每五秒重新生成配置文件 confd与etcd的使用 Add keys This guide assumes you have a working etcd, or consu ...

  2. vue之大文件分段上传、断点续传

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...

  3. SQL语句操作数据试题

    1.在SQL Server中,下列关于数据完整性的说法错误的是(). (选择一项) A:实体完整性要求表中的每一行数据都反映不同的试题,不能存在相同的数据行 B:域完整性是只给定列的输入有效性 C:在 ...

  4. MSSQL 数据库复制脚本

    --新表存在复制数据 insert into 新表 (字段) select 字段 from 旧表 -- 新表不存在复制数据 select * into 新表 from 旧表

  5. python中的base64加密解密

    介绍 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法.可查看RFC2045-RFC2049,上面有MIME的详细规范. ...

  6. 用户账户——《Python编程从入门到实践》

    Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方 1.让用户能够输入数据 建立用于创建用户的身份验证系统之前,我们先来添加几个页面,让用户能够输入数据.当前,只有超级用户能 ...

  7. 剑指offer:二叉搜索树与双向链表

    题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 思路分析: 这道题一开始的思路是借用队列结构,首先中序遍历二叉树,按顺序 ...

  8. mariadb 10.2/mysql 8.0实现递归

    借助mysql 8.0的cte(它是iso sql标准的一部分),可以实现递归,mariadb 10.2.2开始支持递归cte,如下: +----+----------+--------------+ ...

  9. uboot中工具buildman的用法

    1. buildman简介 uboot源码中维护的一款多线程编译测试工具 2. buildman的用法 2.1 进入uboot的源码目录 $ cd <path of uboot> 2.2 ...

  10. 运维笔记--Linux查找指定目录下某段时间的文件

    查找指定目录下,60天之前的文件:find /mnt/xml_data -mtime +60 -name "*.xml" 找到并统计数量:find /mnt/xml_data -m ...