上一章节Spring boot入门,
本章主要介绍spring boot的核心。
*Spring 核心功能
*Spring 配置
Spring 核心功能
1. 独立运行的spring 项目
Spring Boot可以以jar的形式独立运行,运行一个Spring Boot项目只需要通过 java -jar xxx.jar命令来运行。
2. 内嵌servlet容器
Spring Boot可以选择内嵌Tomcat,Jetty或者Udertow,这样我们不需要以war的形式部署项目。
3. 提供starter简化maven配置
Spring 提供一系列starter pom来简化maven的依赖加载。比如加入spring-boot-starter-web。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Spring Boot会自动加入Tomcat和Spring MVC的依赖。
4.自动配置Spring
Spring boot会根据在类路径中的jar,类。为jar包里的类自动配置bean,这样极大减少我们要是用的配置。当然并不是所有的场景都是这样,有时候还是需要去自定义配置的。
5.准生产的应用监控
Spring Boot提供了基于http,ssh,telnet对运行时的项目进行监控。
6,无代码生成和xml配置
Spring4.x提倡java配置和注解配置组合,二Spring Boot不需要任何xml即可实现spring配置。
7,Spring boot的优点
Spring 配置
1.基本配置
(1),入口类和@SpringBootApplication
SpringBoot通常有一个名为*Application.java的入口类,入口类里面有一个main方法,这个main方法其实就是一个标准的Java应用的main方法,也是启动SpringBoot的方法。
@SpringBootApplication是SpringBoot的核心注解,它是一个核心注解,源码如下:
其中@EnableAutoconfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。
例如添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和SpringMVC进行自动配置。
例如添加了spring-boot-starter-data-jpa依赖,SpringBoot会自动进行JPA相关的配置。
SpringBoot会自动扫描@SpringBootApplication所在类的同级包以及下级包里的bean.
(2)关闭特定的自动配置
关闭特定的自动配置使用@SpringBootApplication注解的exclude参数,例如
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
(3)定制Banner
1.1 修改banner
(1)当我们启动SpringBoot时有一个默认图案。
(2)我们在src/main/resources下新建一个banner.txt文件.
(3)通过http://patorjk.com/software/taag/网站生成字符,如输入shabi,将生成的字符图案复制到banner.txt中.
(4)重新运行SpringBoot项目,启动时图案就改变了。
1.2关闭Banner
main方法修改为:
public static void main(String[] args) {
//SpringApplication.run(DemoApplication.class, args);
SpringApplication app = new SpringApplication(DemoApplication.class);
app.setShowbanner(false);
app.run(args);
}
或者fluent API修改为
new SpringApplicationBuilder(DemoApplication.class)
.showBanner(false)
.run(args);
高版本的Spring Boot没有app.setShowbanner(false);方法,我目使用1.5.9版本。可以在application.properties中配置:
spring.main.banner-mode=off
2,Spring Boot的配置文件
Spring Boot使用一个全局的配置文件application.properties或者application.yml放置在src/main/resources文件下或类路径的/config下。
Spring 不仅支持常规的.properties配置文件,还支持yaml的配置文件,yaml是以数据为中心的语言,在配置数据的时候具有面向对象特征。
Spring Boot的全局配置文件的作用是对一些默认配置的配置值进行修改。
(1)简单示例
将tamcat默认的8080端口改为9090,并将默认的访问路径”/”修改为”/helloboot”;
在application.properties加入:
#不配置默认为8080端口
server.port=9090
#将默认的访问路径"/"修改为"/helloboot"
server.contextPath=/helloboot
说明:contextPath,context-path通用,这里不介绍application.yml配置。
3.starter pom
SpringBoot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了场景需要的starter pom,SpringBoot会自动配置bean。
比如之前说的添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和SpringMVC进行自动配置。
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
(3.1) 官方提供的starter pom
(3.2)第三方starter pom
配置方式
在pom.xml的project标签中加入:
<repositories>
<repository>
<id>唯一id</id>
<name>名称</name>
<url>url远程链接</url>
</repository>
<repository>
<id>lilyproject</id>
<name>Lily Maven repository</name>
<url>http://lilyproject.org/maven/maven2/deploy/</url>
</repository>
</repositories>
(3.3)使用xml配置
SpringBoot提倡零配置,即无XML配置,但是在实际开发过程中,可能一些特殊的要求你必须使用xml配置,这时我们可以使用SpringBoot提供的@ImportResource来加载xml配置。
例如:
@ImportResource({"classpath:some-content.xml","classpath:another-content.xml"})
4,外部配置文件
SpringBoot允许使用properties文件,yaml文件,和命令参数作为外部配置。
(4.1)命令行参数配置
SpringBoot是基于jar运行的,打成jar的程序可以通过 下面命令直接运行的。
java -jar XXX.jar
可以通过以下命令修改tomcat端口:
java -jar XXX.jar --server.port=9090
(4.2)常规属性配置
在常规的Spring环境下,注入properties文件里面的值的方式,通过@propertySource指明文件位置,然后通过@Value注入值。
在SpringBoot项目中,我们只需要在application.properties定义属性,直接使用@Value注入。
实例
在以前的基础上在application.properties文件增加:
user.myname=bobo
user.age=18
@Value注入
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloComtroller {
@Value("${user.myname}")
private String name;
@Value("${user.age}")
private Integer age;
@RequestMapping("/")
public String helloword(){
return "我叫"+name+",今年"+age+"岁!";
}
}
运行结果:
说明:这里如果定义user.name是获取系统的名称,后来改为myname。
(4.3)类安全的配置
以上使用@Value注入每个配置显得格外的麻烦,因为我们的配置通常有很多个,像那样每个配置就要注入多次。
SpringBoot提供了基于类型安全的配置方式,通过@ConfiggurationProperties将properties属性和一个bean及其属性关联,从而实现类型安全的配置。
基于以前的application.properties文件:
user.myname=bobo
user.age=18
当然我们也可以新建properties文件,通过@ConfiggurationProperties的属性locations指定properties的位置,且需要在入口类上配置。
类型安全的bean如下:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix="user")
public class UserSetting {
private String myname;
private Integer age;
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
代码解释:
通过@ConfigurationProperties加载文件的配置,prefix属性指定配置时的前缀,locations指定配置文件路径,本例将配置放在application.properties文件中,不需要指定位置。
若新建了properties文件,则需要在指定位置。
SpringBoot1.5之前可以通过@ConfigurationProperties的locations属性指定。
@ConfigurationProperties(prefix="user",locations="classpath:config/xxxxx.properties")
SpringBoot1.5之后使用:
@PropertySource("classpath:config/xxxxx.properties")
/*@PropertySource(value={""})*/
检查代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.entity.UserSetting;
@RestController
public class HelloComtroller {
@Autowired
private UserSetting userSetting;
@RequestMapping("/")
public String helloword(){
return "我叫"+userSetting.getMyname()+",今年"+userSetting.getAge()+"岁!";
}
}
代码解释:
使用@Autowired可以直接注入该配置。
(4.4)日志配置
SpringBoot支持java Util Logging,Log4j,Log4j2和Logback作为日志框架。
SpringBoot默认使用Logback作为日志框架。
配置日志级别:
#默认的Logback日志框架
logging.file=E:\\springBootWork\\mylog
配置日志文件,格式为logging.level.包名=级别
logging.level.org.springframework.web=DEBUG
(4.5)Profile配置
profile是Spring用来针对不同的环境对不同的配置提供支持,全局profile使用application-{profile}.properties,如application-prod.properties.
通过在application.properties文件中设置spring.profils.active=prod来指定活动的profile。
实例:
下面做一个简单的演示,如我们分为生产环境和开发环境,生产环境下端口为8088,开发环境端口为8888.
新建
application-dev.properties文件中加入
server.port=8888
application-prod.properties文件中加入
server.port=8088
application.properties配置:
spring.profiles.active=prod
运行项目
本章节就介绍到这里,下一章节请关注Spring boot核心技术(二),将在春节之前写,主要讲解SpringBoot运行原理,核心注解,实战实例等,谢谢关注。