Spring Boot核心(基本配置)
上一篇Spring Boot我们简单讲了如何快速创建一个SpringBoot项目。
大家都知道SpringBoot非常强大,可以轻松与各种工具集成,但是我们知其然,也必须知其所以然。
今天开始就和大家一起学习一下SpringBoot核心,核心由于过于重要,需要分成好几章,
今天我们先来看看基本配置。
入口类和@SpringBootApplication
使用过或者瞄过一眼Spring Boot工程的小伙伴都知道,SpringBoot有一个特别显著的特点,
就是每个SpringBoot工程都会有一个入口类,
在这个入口类上都会有这么一个注解@SpringBootApplication。
这个类中有一个main方法,main方法中使用SpringApplication.run(*Application.class,args),
用来启动SpringBoot项目。如下所示:
public static void main(String[] args) {
SpringApplication.run(Createproject2Application.class, args);
}
@SpringBootApplication
@SpringBootApplication是Spring Boot的核心注解,它是一个组合注解
(通常我们称由多个注解组成的注解叫组合注解)。点进去瞧一眼
@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 {
@SpringBootApplication注解主要(我这里说了主要喔)组合了
@Configuration,@EnableAutoConfiguration,@ComponentScan
言外之意就是可以可以将这三个注解直接替换@SpringBootApplication
- @EnableAutoCOnfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。
例如添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,
Spring Boot就会对Tomcat和Spring MVC进行自动配置。
2.@ComponentScan 让Spring Boot去扫描与入口类同级以及以下包的Bean(使用注解配置的),
把他们添加到Spring容器,若为JPA项目还可以扫描标注@Entity的实体类。
3.@Configuration 表示当前是一个配置类,也会被Spring进行加载
关闭特定的自动配置
SpringBoot为我们提供了自动化配置,但是在某些特定的场景下,我们可能不需要某个自动配置,
这时可以在@SpringBootApplication中配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
定制Banner
什么是Banner呢,就是在Spring Boot项目启动的时候最开始显示的横幅。
我记得我第一次启动Spring Boot项目的时候印象最深的就是这个横幅了,内心不断OS(wc这么酷炫的吗)。
下面我们看看怎么自定义横幅吧。如果不自定义,默认显示下面图案
修改Banner
- 我们在src/main/sources下新建一个banner.txt
- 登录http://patorjk.com/software/taag 生成我们自己想要的图案
- 复制图案到banner.txt中
- 启动项目验证
关闭banner
当然了,这个banner也不是必须要显示的,我们可以手动关闭它。
修改启动类中的main方法
SpringApplication app = new SpringApplication(Createproject2Application.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
Spring Boot的配置文件
Spring Boot在src/main/resources下有一个全局的配置文件application.properties或application.yml
说到yml这种配置文件,是有点东西的。全称为yaml,是以数据为中心,
支持多种数据格式(如数组),在配置数据的时候具有面向对象的特征。
简单示例
在两种配置文件中配置Tomcat的端口号和默认的访问路径
- application.properties中可以如下配置:
server.port=8888
server.servlet.context-path=/xicent
- application.yml中可以如下配置:
server:
port: 8888
servlet:
context-path: /xicent
其实我们从简单的实例中可以看出,yaml的格式更加清晰,
所有配置看过去一目了然。并且它是有序的。
在以前idea中是不支持yml提示的,现在也都支持了。
但是yaml却引来了另一个问题,yaml格式有严格的要求,稍有配错都有可能出现问题。
因此在项目中看我们如何去取舍了,目前默认还是以properties为主。
使用xml配置
Spring Boot提倡的是0配置,即无xml配置,但是在实际开发中,
我们有时难免会需要加载xml配置,这时我们就可以通过Spring提供的@ImportResource来加载xml配置
例如:
@ImportResource({"classpath:some-context.xml"})
这样我们就成功加载xml配置啦。
命令行参数配置
在Spring Boot中,我们大部分配置都写在了配置文件中,但是有些配置我们可能需要启动时才能确定,
因此Spring Boot还提供了一种命令行配置方式
下面演示如何在运行jar包的时候,配置Tomcat的端口号
java -jar xx.jar --server.port=8888
常规属性配置
在常规的Spring环境中,如果我们想加载某个properties文件,获取其中的配置。
通常的做法是在类上加注解@PropertiesSource()指定配置文件的位置。
然后在类中使用@Value()加载属性。
在Spring Boot中,我们只需在application.properties中定义属性,直接用@Value注入即可。
1.application.properties增加属性
xicent.author=kris
xicent.age=1
2.修改入口类
@Value("${xicent.author}")
String name;
@Value("${xicent.age}")
int age;
@RequestMapping("/")
String index(){
return "author is"+name+",age is"+age;
}
获取其他属性
通用我们用@Value都是获取properties配置文件中配置的属性,
但是@Value的功能可不远远不止这一点喔。
通过@Value注解,我们还能获取系统属性,url,随机数,文字流等等。
// 普通字符串
@Value("xicent")
private String str;
// 操作系统名称
@Value("#{systemProperties['os.name']}")
private String osName;
// 随机数
@Value("#{T(java.lang.Math).random()*168.0}")
private double randomNumber;
// 其他bean的属性
@Value("#{demoService.another}")
private String fromAnother;
// 获取文件资源
@Value("classpath:banner.txt")
private Resource file;
// 获取地址资源
@Value("http://www.baidu.com")
private Resource url;
public void testValue() throws IOException {
System.out.println(getStr());
System.out.println(getOsName());
System.out.println(getRandomNumber());
System.out.println(getFromAnother());
System.out.println(IOUtils.toString(file.getInputStream(),"UTF-8"));
System.out.println(IOUtils.toString(url.getInputStream()));
}
//省略getter,setter方法
访问接口
@RequestMapping("/testvalue")
void testValue() throws IOException {
xicentBean.testValue();
}
类型安全的配置(基于properties)
上面的例子,我们每个属性都要使用@Value注解会显得格外的麻烦,
我们配置的属性通常会是许多个。
在Spring Boot中使用@ConfigurationProperties将配置与bean相关联,
这就是所谓的类型安全的配置。
这里将配置配在一个专门的properties文件中,当然也能直接配置在application.properties中
1.resources文件夹下新增application.properties文件,添加如下属性
xicent.author=kris
xicent.age=1
2.创建一个类
@Component
@PropertySource("classpath:xicent.properties")
@ConfigurationProperties(prefix = "xicent")
public class XicentBean {
private String author;
private int age;
代码解释:@PropertySource可以指定我们需要加载的文件的路径。
@ConfigurationProperties指定我们属性配置的前缀
3.创建接口访问
@Autowired
XicentBean xicentBean;
@RequestMapping("/xicent")
XicentBean getXicent(){
return xicentBean;
}
4.请求接口
Profile配置
Profile是Spring用来针对不同环境使用不同的配置文件。
一般命名为:application-{profile}.properties(如application-prod.properties)。
然后在application.properties中设置spring.profiles.active=prod来指定活动的Profile。
下面演示生产环境(prod)使用8888端口,开发环境(dev)使用9999端口
1.创建application-prod.properties,配置生产环境的端口
server.port=8888
2.创建application-dev.properties,配置开发环境的端口
server.port=9999
3.application.properties中指定生效的profile
spring.profiles.active=prod
4.启动项目,可以看到prod配置文件生效了,绑定端口为8888
疑问:如果我application.properties和application-prod.properties都配了端口,哪个会生效呢?
答案是prod的会生效
ok,今天就暂时分享这么多啦,以上讲的是Spring Boot中的基本配置,
其中有很多地方都是可以深挖单独拿出来讲的。
今天这里只讲了一些基本的,比较常用的基本配置,后续我们还会再详细分享,
喜欢我的小伙伴可以关注我的公众号: 喜讯XiCent 有任何问题可以随时问我喔~,我会第一时间马上为您解答
Spring Boot核心(基本配置)的更多相关文章
- Spring Boot 2.0 配置图文教程
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 ...
- spring boot日志管理配置
spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J,Log4J2和Logback.每种L ...
- 01 Spring Boot 的简单配置和使用
Spring Boot 简介 使用 Spring Boot 可以让我们快速创建一个基于 Spring 的项目,而让这个 Spring 项目跑起来我们只需要很少的配置就可以了. 创建 Spring Bo ...
- Spring Boot 外部化配置(一)- Environment、ConfigFileApplicationListener
目录 前言 1.起源 2.外部化配置的资源类型 3.外部化配置的核心 3.1 Environment 3.1.1.ConfigFileApplicationListener 3.1.2.关联 Spri ...
- 3个Spring Boot核心注解,你知道几个?
Spring Boot 核心注解讲解 Spring Boot 最大的特点是无需 XML 配置文件,能自动扫描包路径装载并注入对象,并能做到根据 classpath 下的 jar 包自动配置. 所以 S ...
- Spring Boot 外部化配置(二) - @ConfigurationProperties 、@EnableConfigurationProperties
目录 3.外部化配置的核心 3.2 @ConfigurationProperties 3.2.1 注册 Properties 配置类 3.2.2 绑定配置属性 3.1.3 ConfigurationP ...
- Spring Boot 排除自动配置的 4 种方法,关键时刻很有用!
Spring Boot 提供的自动配置非常强大,某些情况下,自动配置的功能可能不符合我们的需求,需要我们自定义配置,这个时候就需要排除/禁用 Spring Boot 某些类的自动化配置了. 比如:数据 ...
- Spring Boot核心原理
Spring Boot核心原理 spring-boot-starter-xxx 方便开发和配置 1.没有depoy setup tomcat 2.xml文件里面的没有没有了 @SpringBootA ...
- Spring Boot 核心注解与配置文件
@SpringBootApplication注解 Spring Boot项目有一个入口类 (*Application) 在这个类中有一个main 方法,是运行该项目的切入点.而@SpringBootA ...
随机推荐
- DRF (Django REST framework) 中的Request 与 Response
DRF中的Request 与 Response 1. Request - REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST f ...
- Springboot源码分析之代理三板斧
摘要: 在Spring的版本变迁过程中,注解发生了很多的变化,然而代理的设计也发生了微妙的变化,从Spring1.x的ProxyFactoryBean的硬编码岛Spring2.x的Aspectj注解, ...
- Spring源码剖析2:Spring IOC容器的加载过程
spring ioc 容器的加载流程 1.目标:熟练使用spring,并分析其源码,了解其中的思想.这篇主要介绍spring ioc 容器的加载 2.前提条件:会使用debug 3.源码分析方法:In ...
- Java基础部分-面试题
1.java中的数据类型有哪些? 数据类型主要分为基本数据类型和引用数据类型. 基本数据类型主要包括: 整数类型: byte.short.int.long 浮点数:float.double 布尔类型: ...
- python 18 re模块
目录 re 模块 1. 正则表达式 2. 匹配模式 3. 常用方法 re 模块 1. 正则表达式 \w 匹配字母(包含中文)或数字或下划线 \W 匹配非字母(包含中文)或数字或下划线 \s 匹配任意的 ...
- stringbuffer与stringbuilder区别分析
它们到底都有什么区别呢! 三者都是用来对字符串进行操作,String通常用来定义一个变量,而StringBuilder StringBuffer则通常用来对字符串进行拼接等操作.但其实String同样 ...
- spring boot整合mybatis框架及增删改查(jsp视图)
工具:idea.SQLyog 版本:springboot1.5.9版本.mysql5.1.62 第一步:新建项目 第二步:整合依赖(pom.xml) <dependencies> < ...
- Java并发编程——线程池的使用
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...
- filter修改post参数
前景:公司项目web渗透测试中提出管理登录时,传输密码不能为明文,需要加密传输,但是迫于系统架构,后端代码不能修改,只能在filter中解密参数. 1.前端加密处理: <script type= ...
- 【selenium】- 自动化测试必备工具FireBug&FirePath
本文由小编根据慕课网视频亲自整理,转载请注明出处和作者. 1. FireBug FireBug的安装: 如果使用Firefox浏览器的话,推荐使用较低版本,比如27-32.否则会报错. 点击右上角的菜 ...