SpringBoot简介及与整合

SpringBoot

SpringBoot简介:

简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配置。
从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使 用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置。

SpringBoot工程环境快速搭建

步骤分析:
建项目–
创建一个maven工程
注意:springboot整合的时候在建立maven工程的时候一定要创建一个父
工程 而且,父工程选择2.x的版本,因为我们用的是spring5.x的版本。

导依赖–
spring-boot-web.jar

写配置… 配置SpringBoot的核心配置文件application.properties
此处省略一堆字。因为我们今天要用springboot

创建类–
在src目录下的com.itiheimaba包下新建一个SpringBootApplicationRunner的类。并且在类上加上 @SpringBootApplication 的注解来表示此类就是一个SpringBoot的启动器。另外还需要我们在此类中写一个main方法,方法中利用
SpringApplication.run(SpringBootApplicationRunner.class,args);
来完成最终的启动。

访问localhost:8080
分析spring-boot-web这个依赖:由于这个依赖的导入,根据maven
的依赖机制他给我们导入了一大堆支持我们开发的依赖。

springboot启动器

@SpringBootApplication
public class SpringBootApplicationRunner {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootApplicationRunner.class, args);
	}
}

解释此类的作用:
这个类就是我们SpringBoot 整合其他框架的一个启动类,一会所有准备都完事后,只要一运行此类,那么整合就完事了。

解释@SpringBootApplication的作用:

@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
@Configuration – 提到@Configuration就要提到他的搭档@Bean。使
用这两个注解就可以创建一个简单的spring配置
类,可以用来替代相应的xml配置文件。
@EnableAutoConfiguration – 能够自动配置spring的上下文,试图猜
测和配置你想要的bean类,通常会自动
根据你的类路径和你的bean定义自动配
置。
@ComponentScan – 会自动扫描指定包下的全部标有@Component的类,并注册成bean

经常见到的几个jdk的元注解:

@Target(ElementType.TYPE) // 当前注解的使用范围
@Retention(RetentionPolicy.RUNTIME) //生命周期
@Documented // 声明在生成doc文档时是否带着注解
@Inherited // 声明是否子类会显示父类的注解
总结:一个@SpringBootApplication注解就搞定了所有事,因为它觉得以上三个注解都是我们固定的配置,所以就给我们省略了。又封装出一个注解来代替,这就是SpringBoot 的核心设计思想。

思考–我们为什么要把SpringBoot工程的启动类创建在base包下?
SpringBoot工程运行时,扫描包来创建容器会扫描启动类所在的包以及它下面的子包。

细节一分析

SpringApplication.run(SpringBootApplicationRunner.class,args);
备注:
– run方法:
此方法是用于把启动类的字节码传入给SpringBoot的核心容器,
通过注解配置解析来创建IOC容器。
– 参数一:就是启动类的字节码。
– 参数二:通常情况下就是main方法的args
**拓展:args有内容吗?
验证:进行打印,会出现一个对象的地址

细节二分析

问题:我们关注控制台,有一个SpringBoot的图标。那这个图标我们可以不让其打印吗?
解释:可以。按照以下操作
SpringBootApplication sba = new SpringBootApplication(class);
sba.setBannerMode(Mode.off);
sba.run(args);

SpringBoot与SpringMVC的整合

入门案例:springboot 整合Spring 和 springMVC
步骤分析:
** 在com.itheima 包下新建一个web.controller包
** 在web.controller下新建 HelloController
** 加入 @RestController 注解就ok 啦!
** 然后通过访问 localhost:8080/…

@RestController
public class TestController {
	@RequestMapping("/hello")
	public String hello(){
		return "success";
	}
}

SpringBoot热部署的使用-spring5x和spring-devtools-2.0.0

  1. 重启传统的springmvc项目,访问一把!OK
    修改:此时随便在controller类中改改 再访问!不OK
    原因:我们改变源码了,但是没有重新部署!!!
    解决:重新部署一遍,又OK了!!!

  2. 分析:
    问题:
    总是重新部署势必会花费大量的时间!这时候大胆畅想一下能不能修改源码后不重新部署也能生效呢?
    注意:修改源码必须重新编译,重启是重新编译的手段。这个思想是没有问题的,但是我们此时要想的是能不能不重新部署也能完成重新编译!!!
    解决:利用SpringBoot的热部署就可以实现。

  3. 如何实现SpringBoot的热部署
    – 导入依赖
    spring-boot-devtools.jar 2.0.0
    导完坐标保存后我们的项目在开发工具中会有一个变化

    springloaded-1.2.9.jar
    注意:这个jar包我们直接导入不了,需要手动改变一下版本号。导入包以后还需要我们 在eclipse中配置
    -javaagent:D:/RepMaven/RepMaven/org/springframework/springloaded/1.2.9/springloaded-1.2.9.jar -noverify
    参数配置:是springloaded-1.2.9.jar 这个包在maven本地仓库的位置。
    此时热部署就可以正常使用了…

SpringBoot整合springdatajpa

– 创建一个新的项目
在刚才整合完springmvc的基础上进行整合
– 导依赖
mysql 驱动包
spring-boot-starter-data-jpa.jar
– 写配置
在项目的resources目录下新建application.properties文件
此文件中配置一些 经常修改 的信息,此处我们配置的是
数据库连接信息。

– 创建类
** 创建实体类 并利用注解建立与数据库的对应关系。
** 创建Dao接口并且 extends JpaRepository和JpaSpecificationExecutor
** 创建service层
** 创建Controller层,写相应的查询方法
引入jQueryeasyUI 插件,将数据显示到表格中
步骤分析:
– 在resources目录下新建一个static文件夹,必须
命名为static 这是springboot的规定,然后将easyUI的相关文件放入,最后直接访问 user.html 通过ajax
请求请求后台数据。
application.properties

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springdata
spring.datasource.username=root
spring.datasource.password=199505140110

#JPA Configuration:
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update

SpringBoot整合MyBatis

步骤分析:

  1. 建项目(还用刚才的)
  2. 导依赖
    在 pom.xml 中加入以下依赖

< dependency >
< groupId>org.mybatis.spring.boot</ groupId>
< artifactId>mybatis-spring-boot-starter</ artifactId>
< version>1.1.1</ version>
</ dependency>

  1. 写配置(springboot的核心配置文件,此时不用改!)
  2. 创建类
    – 新建IUserMapper 接口 写一个根据username模糊查
    询User集合的接口
    和之前的方式一样,只是多了两个注解:
    @Mapper:声明 Mapper 接口
    @Select:声明这个接口所需要使用的 sql,当然,有查
    询的注解,肯定就有增删改的注解。
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import cn.itcast.info.pojo.User;
@Mapper
public interface UserMapper {
@Select("select * from user where name like 
'%${value}%'")
public List<User> queryUserByName(String name);

}

– Service层新增一个接口和实现方法
– 进入controller 新增一个方法(此时需要传入参数,我
们用一下REST 风格)

@RequestMapping(“findUserByName/{name})
public List<User> findUserByName(@PtahVarable(“name”)String name){
List<User> list = userService.findUserByName(name);
Return list;   
}

总结:
通过以上操作我们发现一个问题,就是热部署也不是万能的,当我们修改了Dao层中注解里面的SQL语句并不能自动部署。这个问题要注意,它属于一个细节,但是往往细节也能决定你的身价!!
注意:
mybatis的特性,只有实体类字段与数据库字段相同时对象才可以封装成功,如果不相同,记得sql语句起别名

SpringBoot整合Redis

  1. 准备工作
    – Windows下开启Redis服务
    – 为了方便查查看,开启Redis的一个客户端管理工具
  2. 整合步骤分析
    – 建项目(此处还用原来的项目)
    – 导依赖
    在 pom.xml 加入依赖
    spring-boot-starter-redis
    – 写配置(注意:SpringBoot的核心配置不用改,但
    是此时由于是要缓存数据库,需要配置若干注解)
    – 打开SpringBoot启动类,加入
    @EnableCaching 意思就是开启缓存的支持。
    – 接着到service中在配置缓存的具体适用规则。
    ** @Cacheable(value=”…”)
    注:在执行查询的方法上加@Cacheable注解表示第一次查询到数据库取值然后在缓存中存一份,当再次查询的时候就先到缓存中取值,知道执行缓存清理操作缓存数据才消失,其中重点分析注解中的两个参数
    value :指定存入redis中的key的值。
    **@CacheEvict(value=”…”)
    注:这个注解适用于清除缓存,里面的参数和存入注解时的一样,只是多一个allEntries属性表示是否彻底清除。
@Override
 //@Cacheable(value="userList")
 @CacheEvict(value="userList",allEntries=true)
 public List<User> findAll() {
 	System.err.println("到数据库查询*****************************************");
 	return userDao.findAll();
 }

SpringBoot整合Junit

  1. 步骤分析:
    – 建项目(此处还用以上的项目为例)
    – 导依赖
    在 pom.xml 中加入测试依赖
    spring-boot-starter-test
    – 写配置(SpringBoot核心配置不用改)
    – 创建类
    在工程的test目录下新建一个测试类
    测试类内容如下:
//替换运行器
@RunWith(SpringJUnit4ClassRunner.class)
 //指定引导类的字节码
@SpringBootTest(classes=SpringBootApplicationRunner.class) 
public class SpringBootJunitTest {
	@Autowired
	private IUserService userService;
	
	@Test
	public void testFindAll() {
		List<User> users = userService.findAll();
		for(User user : users) {
			System.out.println(user);
		}
	}
}

总结:SpringBoot的Junit整合其实和spring对Junit的整合差不多,只是换了一个注解配置。

SpringBoot读取配置文件

SpringBoot读取application.properties配置文件

  1. properties文件通常是做什么的?
    在我们程序中,一些我们经常要进行修改的属性,
    通常配在properties文件中,这样当修改的时候就可以修改properties文件就可以了。但是有一个环节必不可少,那就是我们想用这些属性的时候,必然要去读取properties文件。所以读取properties文件也是我们程序中必须的一部分。
  2. 在SpringBoot中如何读取核心配置文件application.properties
    步骤分析:
    – 在测试类中注入一个Envrionment 对象。
    private Envrionment environment;
    – 然后调用这个对象的getProperty() 方法就可以了。
    environment.getProperty(key);
    注意:此对象只用于读取SpringBoot的核心配置文件,
    不是它核心配置文件的内容读不出来。
// 专门用来读取SpringBoot的核心配置文件
	@Autowired
	private Environment environment;
	/**
	 * 读取SpringBoot的核心配置文件(application.properties)
	 */
	 @Test
	 public void test(){
		 String url = environment.getProperty("spring.datasource.url");
		 System.err.println(url);
	 }

SpringBoot读取自定义properties文件

  1. 需求分析:
    – 自定义一个mail.properties 文件
    – 再创建一个MailProperty.java 对象
    – mail.properties文件中的值和MailProperty.java
    对象的属性对应。
    – 然后最终直接操作MailProperty.java对象就相当于
    操作mail.properties文件,从而达到不直接读取
    mail.properties文件就能对其进行操作的目的。

  2. 操作步骤:
    – 自定义一个mail.properties 文件
    – 再创建一个MailProperty.java 对象
    – mail.properties文件中的值和MailProperty.java
    对象的属性对应。
    – 在MailProperty.java 对象上配置两个注解
    @ConfigurationProperties(prefix=”mail”)
    @PropertySource(value=”classpath:mail.properties”)
    注意:@ConfigurationProperties prefix属性的含义就是指定properties文件中的属性的前缀。
    @PropertySource 注解是指定对应的properties文件的位置。
    – 配置完了还不能用,此时我们需要一个springboot的一个依赖 spring-boot-configuration-processor

– 完成以上步骤后,发现还不行,此时我们还需要一个注解的配合才能完成。
== @Component 或者 @Configuration==
把以上注解配置到我们的MailProperty.java上就相当于把这个类当做一个可配置的类,才能够最终将 MailProperty.java 注入到IOC 容器中。
总结:这样做的好处就是当项目中有大量的properties文件的时候我们可以不用频繁的解析配置文件,而是转化成操作对象的方式,变得更简单。

MailProperty.java:

@Component
@Configuration
@PropertySource("classpath:mail.properties")// 找目标文件
@ConfigurationProperties("mail")
public class MailProperty {

  private String host;
  private String port;
  private String username;
  private String password;
  
  
  public String getHost() {
  	return host;
  }
  public void setHost(String host) {
  	this.host = host;
  }
  public String getPort() {
  	return port;
  }
  public void setPort(String port) {
  	this.port = port;
  }
  public String getUsername() {
  	return username;
  }
  public void setUsername(String username) {
  	this.username = username;
  }
  public String getPassword() {
  	return password;
  }
  public void setPassword(String password) {
  	this.password = password;
  }
  @Override
  public String toString() {
  	return "MailProperty [host=" + host + ", port=" + port + ", username=" + username + ", password=" + password
  			+ "]";
  }

测试类

	
	@Autowired
	private MailProperty mailProperty;
	/**
	 *   自定义的配置文件(xx.proerties)
	 *   需求: 发送一份邮件,需要有发送邮件的相关必备信息
	 */
	 @Test
	 public void test1(){
		 System.err.println(mailProperty.getHost());
	 }

mail.properties

mail.host=smtp.sina.com 
mail.port=25 
mail.username=itcast 
mail.password=heima

SpringBoot读取yml配置文件

概述:yml文件也是springboot为我们提供的一种核心配置文件的格式,它除了能像application.properties文件那样写配置,另外他也提供了一种新的数据结构就是
更加 一目了然 的树形结构。
用法:
1.读取普通数据
– 使用@Value 注解配合 Spring 的 EL 表达式
@Value("${mail.host}")
private String mailHost;

2.读取对象数据
– 和读取自定义的properties一样。

MailYml

@Component
@PropertySource("classpath:mail.yml")// 找目标文件
@ConfigurationProperties("mail")
public class MailYml {

	private String host;
	private String port;
	private String username;
	private String password;
	
	
	public String getHost() {
		return host;
	}
	public void setHost(String host) {
		this.host = host;
	}
	public String getPort() {
		return port;
	}
	public void setPort(String port) {
		this.port = port;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "MailYml [host=" + host + ", port=" + port + ", username=" + username + ", password=" + password
				+ ", getHost()=" + getHost() + ", getPort()=" + getPort() + ", getUsername()=" + getUsername()
				+ ", getPassword()=" + getPassword() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
				+ ", toString()=" + super.toString() + "]";
	}
	
}

测试类

@Autowired
	private MailYml mailYml;
	/**
	 * 读取yml配置文件(SpringBoot中的一种特制 xx.yml)
	 */
	 @Value("${spring.jpa.database}")
	 private String aaa;
	 
	 @Test
	 public void test2(){
		 System.err.println(aaa);
		 System.err.println(mailYml);
	 }

mail.yml

#普通数据
spring.jpa.database: mysql

#对象数据
mail:
 host: smtp.sina.com
 port: 25
 username: itcast
 password: heima
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值