一、什么是Spring Boot
用一些固定的方式来构建生产级别的Spring应用。
Spring Boot推崇“约定”>“配置”的方式,以便于你能够尽可能快速的启动并运行程序。
人们把Spring Boot成为搭建程序的脚手架。其最主要的作用就是帮我们快速的构建庞大的Spring项目,并尽可能的减少一切xml配置,做到开箱即用,迅速上手,让程序员关注业务而非配置。
什么是“约定”>“配置”?
Spring Boot约定一些固定的配置并在底层封装好这些东西,等到你用的时候可以直接去用而不是一个个去配,这些已经配置好的东西称为“约定”。有了这些约定的东西,程序员写代码的时候就不用手动配置。
二、为什么要用Spring Boot
以前的java写Spring项目需要太多的配置,臃肿,麻烦。搭建项目需要太多的时间和心思。其原因主要是两点:
- 复杂的配置
- 混乱的依赖管理
而Spring Boot让这一切成为了过去。
我们可以使用SpringBoot创建java应用,并使用java -jar启动她,就能得到一个生产级别的web工程。
三、Spring Boot的特点
- 为所有Spring开发者提供一个非常快速的、广泛接收的入门体验。
- 开箱即用(启动器starter-其实就是Spring Boot提供的一个jar包),但通过自己设置参数(.properties),即可快速摆脱这种方式。
- 提供了一些大型项目中国常见的非功能性特性,入内嵌服务器,安全,指标,健康监测,外部化配置等。
- 绝对没有代码生成,也无需XML配置。
四、怎样用Spring Boot
- 工具:idea2017
- jdk: 1.8
1. 第一步,创建一个Maven项目。
我创建的时候因为以前起了同名的项目为避免重复将项目名字后面加了个01
创建Maven项目成功后是这样的
2.我们要使我们的普通maven项目变为SpringBoot项目
- 1、导入springboot父工程依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
这里我们的version选的是2.0.4,指的是选择的springbootstarter(spring boot启动器)父工程的版本
- 2、导入springbootweb依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
这里我们不再需要选择版本,因为我们已经添加了springbootstarter父工程,这个父工程会帮我们管理依赖版本。
当添加完依赖后我们看项目的External Librarier,已经自动帮我们添加了支持spring,springmvc和web相关的依赖,并且自动关联了最适合的版本。
3.快速使用springboot
我们现在已经搭建好了springboot需要的基本环境,是不是非常快。现在就让我们一起编写第一个可访问的web项目。
- 1、编写main函数(SpringBoot项目入口函数)
在java目录下添加cn.itcast.main类 ,编写如下代码
@SpringBootApplication
public class main {
public static void main(String[] args) {
SpringApplication.run(main.class);
}
}
这个类相当于我们普通java项目的main函数,运行SpringBoot项目就像运行普通java项目一样,run主函数就行了。
- 2、编写测试页面
有了主函数还要写什么呢?此时我们已经有了一个基本完整的SpringBoot项目所需内容,但是现在什么测试内容都没有,我们就需要写一个页面来看到我们的项目搭建运行成功了。所以我们要编写一个测试页面。
那应该怎么写呢?
以前怎么写,现在就怎么写!
我们写一个controller层的接口:
在cn.itcast下新建controller.HelloController.java
package cn.itcast.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("hello")
public String hello(){
return "hello SpringBoot";
}
}
现在我们在main函数页面,启动main函数,即启动SpringBoot项目
打开浏览器访问:http://localhost:8080/hello/
即可看到我们的测试页面
五、答疑
Q: 为什么没有web.xml了?
A: springboot项目中默认采用servlet版本是3.0版本,3.0版本后不需要web.xml,可以用纯注解。
Q: 为什么没有Spring的ApplicationContext.xml了?
A: 不用这个xml了,SpringBoot已经默认帮我们配置了以前Spring的配置文件里需要配置的所有东西。但是SpringBoot不能帮你把全世界所有框架都配好,所以SpringBoot帮你配置的框架、东西是有限的。当我们需要用到SpringBoot没有帮我们配置的东西的时候,就需要自己去配置。
六、Spring的java配置方式,普通方式java配置
用java类+注解配置数据库连接池
结构:
先向pom里面添加druid依赖
<dependency>
<groupId>com.alibaba</groupId>
<!--dataSource连接池-->
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
jdbc.properties 数据库配置
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
java类+注解 配置连接池
package cn.itcast.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
//java配置方式
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driver}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
controller中注入dataSource,然后打断点以dbug方式运行查看
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@GetMapping("hello")
public String hello(){
return "hello SpringBoot";
}
}
刷新浏览器
繁琐
七、SpringBoot提供的属性注入方式
7.1第一种
配置文件:application.properties(resources目录下)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
配置属性类:JdbcProperties.java
//配置属性类 前缀是jdbc
@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {
String driver;
String url;
String username;
String password;
}
配置类:JdbcConfig.java
//表明这是一个配置类
@Configuration
//启用配置属性类
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {
//Spring调用,Spring注入
@Bean
public DataSource dataSource(JdbcProperties properties){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(properties.getDriver());
dataSource.setUrl(properties.getUrl());
dataSource.setUsername(properties.getUsername());
dataSource.setPassword(properties.getPassword());
return dataSource;
}
}
实践部分,直接注入@Autowired(任何其他部分想要注入都可以直接注入使用)
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@GetMapping("hello")
public String hello(){
return "hello SpringBoot";
}
}
类结构:
7.1第二种
配置文件:application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
配置类:JdbcConfig.java
//标识这是一个配置类
@Configuration
public class JdbcConfig {
@Bean
//Spring调用的时候直接去application.properties里找能set到DataSource里属性,且前缀是jdbc
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
}
实践部分,直接 @Autowired注入使用:
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@GetMapping("hello")
public String hello(){
return "hello SpringBoot";
}
}
每日注解
@RestController
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
@GetMapping
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
@Configuration:声明一个类作为配置类,代替xml文件
@Bean:声明在方法上,将方法的返回值加入Bean容器,代替
标签(和@Configuration配合使用) @Bean标注的方法,由Spring调用,加入到applicationContext中,以后谁要用这个方法的返回值(返回一个类对象)就直接@Autowired注入就行了
@Value:属性注入
@PropertySource:指定外部属性文件。
@ConfigurationProperties(prefix = “”)配置属性注解,标识在类上,自动去匹配application配置文件里的相关属性注入到类的同名属性中
@EnableConfigurationProperties(xxx.class)启用配置属性类,和上面的连用