一、什么是 spring Boot?
Spring Boot 是由Pivotal团队提供的全新的框架,其设计目的是用来简化新的Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。(对Spring系列的框架进行了整合、简化)
二、Spring Boot 的特点
在编码、配置、部署、监控 上变的简单, 是微服务的入门级框架。
- 内嵌了Tomcat(默认8080端口),无需部署war文件
- logback提供日志记录
- 简化maven配置
- 自动spring配置
三、简单环境搭建
方式一、(了解)使用maven 构建SpringBoot应用程序
① 访问 http://start.spring.io/
② 选择构建构建工具 Maven Project、Spring Boot版本以及一些工程基本信息,点击“Switch to the full version”,选择Java版本1.8
③ 点击 Generate Project 下载项目压缩包,导入IDE工程中
方式二、(常用)手动构建springboot项目:使用Interlli IDEA 创建 Springboot+maven 项目
1、创建一个 Spring Initializr 工程
填写maven相关信息,
选择boot版本,勾选 “Web” 即可,
创建成功之后,默认的初始SpringBoot项目模块基本也就建立好了。
pom.xml中默认有两个模块:
spring-boot-starter: 核心模块,包括自动配置支持、日志和yaml
spring-boot-starter-test: 测试模块,Junit、Hamcrest、Mockito
项目结构:
在根目录下有一个 artifactId+Application命名规则的入口类,整个项目都会通过此类运行,有一个关键的注解
@SpringBootApplication,它的目的就是开启springboot自动配置。
四、boot项目的运行
1、为了能够看到明显的效果,在启动类上 再加一个注解: @RestController, 添加一个helloworld方法
package com.lbh;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class SpringBootTestApplication {
@RequestMapping("/")
public String hello(){
return "Hello World....";
}
public static void main(String[] args) {
SpringApplication.run(SpringBootTestApplication.class, args);
System.out.println("==============Spring Boot Start===============");
}
}
右键-运行,就能跑起来,不进行配置的话,默认端口号就是8080
五、原理解析
1、入口类
这个类中有一个main() 方法,此方法为标准Java应用程序的入口方法,这里用到了一个组合注解@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 {
...
}
@SpringBootApplication 它组合了 @SpringBootConfiguration、@EnableAutoConfiguration以及@ComponentScan,
@SpringBootConfiguration:表明这个类是个配置类;
@EnableAutoConfiguration:表示让SpringBoot根据类路径下的jar包依赖为当前项目进行自动配置;
@ ComponentScan:表示此类的路径会被spring自动扫描并装入bean容器中。
使用@SpringBootApplication这个注解了系统回去入口类的同级包中去扫描实体类,建议入口类位置在 groupId+arctifactID组合的包名下。
2、关闭特定的自动配置
@ComponentScan注解是有一个过滤器的,如果我们只想要@SpringBootApplication去扫描特定的类而不是全部类,那么就可以关闭自动配置
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
3、启动Banner 图案修改或关闭
1.在src/main/resources下新建一个banner.txt文档
2.通过http://patorjk.com/software/taag网站生成需要的字符,将字符拷贝到步骤1所创建的txt文档中,比如我这里为Hi,lbh's Boot... 生成字符, 将字符图案拷贝到 文档里重启即可;
关闭Banner:修改一下main()方法代码即可
public static void main(String[] args) {
//SpringApplication.run(SpringBootTestApplication.class, args);
SpringApplicationBuilder builder = new SpringApplicationBuilder(SpringBootTestApplication.class);
//修改banner的模式为off
builder.bannerMode(Banner.Mode.OFF).run(args);
System.out.println("==============Spring Boot Start===============");
}
4、application.yaml 或 application.properties配置文件
server.context-path=/HelloBoot #项目访问路径
server.port=1111 # Tomcat端口 1111
#常规普通属性配置
book.name=我们仨
book.author=杨绛
book.pinyin=womensa
#解决中文乱码问题
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
然后 在IntelliJ IDEA中依次点击File -> Settings -> Editor -> File Encodings,将Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上。(参考【Springboot 之 解决IDEA读取properties配置文件的中文乱码问题】【Springboot 之 解决IDEA读取properties配置文件的中文乱码问题】)。
在类中使用 @Valid() 注解就可以了
@Value("${book.name}")
private String name;
@Value("${book.author}")
private String author;
@Value("${book.pinyin}")
private String pinyin;
@RequestMapping("/")
public String hello(){
return "Hello World..《 "+name+" 》"+author+" --> "+pinyin;
}
5、类型安全配置
就是将properties配置文件与bean类关联在一起,使用更方便、安全
①、创建book.properties
book.name=倾城之恋
book.author=张爱玲
book.price=35
②、创建book实体类
@Component
@ConfigurationProperties(prefix = "book") //前缀
@PropertySource("classpath:book.properties") //文件位置
public class Book {
private String name;
private String author;
private String price;
getter() setter() 方法
toString()
}
③、Controller使用
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private Book book;
@RequestMapping("/getBook")
public String getBookDetial(){
return book.getAuthor()+" 《 "+ book.getName()+ " 》"+ book.getPrice();
}
}
6、日志配置
Spring boot 默认使用Logback作为日志框架,我们可以手动配置日志级别以及日志输出位置。
logging.file=E:/ideaworkspaces/ChoiceSCM/SprintBootDemo/BootLog.log
logging.level.org.springframework.web=debug
7、Profile配置问题
全局Profile配置使用 application-{profile}.properties来定义, 然后在application.properties中通过spring.profiles.active来指定使用哪个Profile。
在 resources 下分别建立不同的配置文件 application-dev.properties(开发环境)、application-prod.properties(生产环境);
在application.properties中进行配置
spring.profiles.active=dev #使用开发环境的配置
参考:《 JavaEE开发的颠覆者 Spring Boot实战》第五章、第六章