SpringBoot定义和作用
- 定义:通俗的讲,SpringBoot可以替我们做一些自动配置(比如SSM框架中写在 XML文件章的各种配置)
- 作用:(1)是编码变简单:SpringBoot内部集成了很多自动配置,我们所要配置内容都集中在一个叫application.properties(或者application.yml)的文件中。(2)使部署变简单:以往的部署流程是将已有的项目打包,然后发布到Tomcat或者WebLogic等容器中运行;SpringBoot内部有内置的Web容器,它提供了一个启动类,直接运行即可。(3)使监控变简单:SpringBoot提供了运行时的应用监控和管理功能。我们可以通过HTTP、JMX、SSH协议来进行操作;监控功能提现在SpringBoot可以实时地监控程序运行时加载的应用配置、环境变量和自动化配置信息。
掌握SpringBoot项目环境搭建的步骤
- 环境要求
JDK1.7及以上版本,Maven3.2及以上版本,IDEA14及以上版本。
2.环境搭建
打开IDEA–>File–>New–>Project或者Module
默认JDK是1.8版本,如果没有,只有保证1.7以上即可
点击Next 配置Maven坐标,项目名称和版本号
点击Next 这一步主要进行Maven依赖和SpringBoot版本号的选择,依赖选择web,即Spring与Web开发相关的依赖
点击Next 这一步主要进行项目名称和存放的位置—>Finish
3.核心组件
SpringBoot创建完之后的项目结构
此图中大家需要关注四个地方:
(1)pom.xml:项目依赖
SpringBoot框架需要的依赖主要有两个
《1》spring-boot-starter-web
此依赖包含的内容有:Spring的核心组件、SpringMVC、内置Web容器以及其他与Web开发相关的组件
《2》spring-boot-starter-test
此依赖主要包含一些测试框架的集成,比如JUnit、AssertJ、Mockito、Hamcrest、JSONAssert和Spring Test等。
除此之外,还需要一个父依赖:spring-boot-starter-parent
此依赖主要包含对资源的过滤以及对插件的识别。在实际的开发中可以使用自己的父项目作为依赖来代替此依赖。
(2)DemoApplication:SpringBoot 项目的启动类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
如上述代码所示,启动类非常简单,主要包含一个@SpringBootApplication注解和一个SpringBoot的核心类SpringApplication
其中@SpringBootApplication是一个组合注解,它主要组合了三个注解:
《1》@SpringBootConfiguration:此注解标注的类可以作为SpringBoot的配置类,相当于Spring的xml配置文件。此处使用类进行项目配置的形式是Spring4.0之后提出的一种新的配置方式,即java配置的方式。
《2》@EnableAutoConfiguration:启动SpringBoot的自动配置
《3》@ComponentScan:扫描与启动类同包或者级别较低的包中的类中的注解,并使其生效。
(3)application.properties
SpringBoot项目中的配置文件,也可以是名为application.yml的文件。SpringBoot所有的配置都可以在此文件中展开,当然也可以编写XML文件进行配置,SpringBoot将可以读取XML文件中的配置。
例如:在application.properties中编写代码server.port=8080,可以设置项目启动的端口号为8080
(4)DemoApplicationTests
SpringBoot项目默认生成的测试类,可以使用SpringBoot集成的测试框架进行功能测试。
注意:启动类DemoApplication必须与其他类在同一目录,或者级别高于其他类,否则系统在启动时会提示找不到启动类。
4.整合MyBatis
(1)整合步骤
《1》在pom.XML中添加依赖
<!--MyBatis相关依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!--MySQL进行持久化操作的相关依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
注意:由于Maven默认情况下在构建项目时,不会将Sources Root(即java类所在目录)目录中的resources文件(比如Mapper映射文件)一起打包,建议将Mapper映射文件统一放在resource资源目录下,或者在pom文件中添加如下配置,让maven能够去指定目录中找到Mapper映射文件并进行打包。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
《2》在application.properties(或application.yml)文件中配置数据源,此处为application.yml文件。
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/fiction?useUnicode=true&characterEncoding=utf-8
username: root
password: root
《3》继续配置application.properties(或application.yml),配置mapper映射文件的位置。
mybatis:
mapper-locations: classpath:mapping/*Mapper.xml
《4》配置mapper接口的位置。这里介绍两种方式,第一种是使用@MapperScan注解标注mapper接口类所在的package,关键代码如下
@SpringBootApplication
@MapperScan("com.example.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
第二种是在mapper接口上使用@Mapper注解标注,关键代码如下
@Mapper
public interface UserMapper{
public String getUserName(@Param(“id”)Long id);
}
《5》编写mapper中的SQL映射语句,启动项目测试。
(2)添加事物
添加事物步骤很简单,只需要两步。
《1》在启动类中添加@EnableTransactionManagement注解
《2》在需要添加事物的方法上面添加@Transactional注解。
5.整合Redis
(1)添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
(2)配置与Redis服务器的连接。由于Spring Boot整合Redis之后内部已经集成了与Redis相关的自动配置,所以这里只需要application.properties中配置与Redis连接的一些参数即可,详情配置如下:
#Redis数据库索引(默认是0)
spring.redis.database=0
#Redis服务器地址
spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.user=root
spring.redis.password=root
(3)有了第二步的连接后,还需要创建RedisTemplate的Bean组件。
RedisTemplate是一个模板类,它提供了很多快速使用Redis的API,不需要自己来维护连接和事物。具体的实现方法是创建一个RedisConfig类来管理RedisTemplate的Bean组件,关键代码如下:
@Configuration
public class RedisConfig {
/**
* <p>提供RedisTemplate的bean实例</p>
* @param factory
* @return
*/
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(factory);
return redisTemplate;
}
}
(4)创建RedisUtil工具类,调用RedisTemplate操作Redis服务端进行数据的存储,关键代码如下
@Component
public class RedisUtil {
@Resource
private RedisTemplate<String,Object> redisTemplate;
/**
* 往redis中缓存数据
* @param key
* @param object
* @return
*/
public boolean set(String key,Object object){
ValueOperations<String,Object> vo = redisTemplate.opsForValue();
vo.set(key,object);
return true;
}
/**
* 根据key从Redis服务器中获取value值
* @param key
* @return
*/
public Object get(String key){
ValueOperations<String,Object> vo = redisTemplate.opsForValue();
return vo.get(key);
}
}
(5)测试,编写控制器类进行测试
@Controller
public class TestController {
@Resource
private RedisUtil redisUtil;
@RequestMapping("/test")
@ResponseBody
public String getRedisValue(){
redisUtil.set("testsl","123");
return redisUtil.get("tests1").toString();
}
}
启动项目测试
6.自定义Spring Boot的自动配置
本任务通过一个案例来实现自定义的SpringBoot自动配置,最终的实现效果:当我们在项目中引入了此自定义的自动配置之后,只需要在application.yml中配置一个参数helloMsg,就可以实现输出“hello某某”的功能。步骤如下:
(1)创建一个Maven项目autoconfigdemo,此项目将作为自动配置项目被其他项目使用,项目的打包方式为jar。具体代码如下
<groupId>com.exanple</groupId>
<artifactId>autoconfigdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
(2)添加与自动配置相关的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
(3)编写三个关键类
《1》属性读取类:专门用于属性的读取,关键代码如下
@ConfigurationProperties(prefix = "hello")
public class SayHelloProperties {
private String helloMsg = "spring boot";
public String getHelloMsg() {
return helloMsg;
}
public void setHelloMsg(String helloMsg) {
this.helloMsg = helloMsg;
}
}
SayHelloProperties 类作为属性读取类,它的属性为helloMsg,默认值为“spring boot”;@ConfigurationProperties注解的作用是:当某个SpringBoot项目引用了此Maven项目,并且此SpringBoot项目的application.properties文件中有hello.helloMsg的配置时,helloMsg的值将以此配置的值作为最终值。
《2》核心事件类,关键代码如下
public class SayHello {
private String helloMsg;
public String sayHello(){
return "hello"+helloMsg;
}
public String getHelloMsg() {
return helloMsg;
}
public void setHelloMsg(String helloMsg) {
this.helloMsg = helloMsg;
}
}
以上SayHello类作为核心事件类,主要进行核心事件的编写。这里的核心事件是sayHello()方法,方法中用到的属性的值来自于属性读取类,即SayHelloProperties 那么如何将属性读取类的属性helloMsg的值赋给SayHello呢?接着看下面
《3》整合类,关键代码如下
@Configuration
@EnableConfigurationProperties({SayHelloProperties.class})
@ConditionalOnClass({SayHello.class})
@ConditionalOnProperty(prefix = "hello",value = "enabled",matchIfMissing = true)
public class SayHelloAutoConfigration {
@Resource
private SayHelloProperties sayHelloProperties;
@Bean
@ConditionalOnMissingBean({SayHello.class})
public SayHello sayHello(){
SayHello sayHello = new SayHello();
sayHello.setHelloMsg(sayHelloProperties.getHelloMsg());
return sayHello;
}
}
SayHelloAutoConfigration 类作为整合类,主要工作是将属性读取类和核心事件类进行整合。整合关键点
1.添加@Configuration注解,使此类作为一个配置类存在,作用等同于Spring的applicationContext.xml文件
2.添加@EnableConfigurationProperties注解,作用是将属性读取类SayHelloProperties整合到系统中
3.添加@ConditionalOnClass条件判断注解,作用是判断核心事件类SayHello是否存在,如果存在则整合到系统中。
4.添加@ConditionalOnProperty添加判断注解,设置application.properties文件中配置的hello.helloMsg的值生效。
5.添加@ConditionOnMissingBean条件判断注解,作用是判断当前Spring IOC容器中是否存在SayHello的bean实例。如果不存在则进行创建,并为其属性赋值,即属性读取类中的helloMsg的值(这里就实现了将属性读取类中的值赋值给SayHello核心事件类)
《4》在项目资源目录resource中创建spring.factories文件
在spring.factories文件中添加如下代码
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.example.demo.SayHelloAutoConfigration
添加这段代码的作用是让依赖此自动配置项目的项目能够识别上述的自动配置类,并进行自动配置。
(4)创建Springboot项目testAutoConfig,并引入上述步骤中创建的Maven项目autoconfigdemo作为依赖(需要将autoconfigdemo项目达成jar包并导入Maven本地仓库中),在testAutoConfigdemo中创建一个Controller类。
@Controller
public class HelloController{
@Autowired
private SayHello sayHello;
@RequestMapping("/sayHello")
@ResponseBody
public String sayHello(){
return sayHello.sayHello();
}
}
再在application.properties中添加配置:hello.helloMsg=donghai
最后启动TestAutoConfig项目,在浏览器中访问。