Spring Boot(4)

Spring Boot是一个便捷搭建基于spring工程的脚手架;作用是帮助开发人员快速搭建大型的spring 项目。简化工程的配置,依赖管理;实现开发人员把时间都集中在业务开发上。
Spring Boot的特点
 创建独立的Spring应用,为所有Spring的开发者提供一个非常快速的、广泛接受的入门体验。
 直接嵌入应用服务器,如tomcat.jetty、undertow等;不需要去部署war包。
 提供固定的启动器依赖去简化组件配置;实现开箱即用(启动器starter-其实就是Spring Boot提供的一个jar包),通过自己设置参数(.properties或.yml的配置文件),即可快速使用。
 自动地配置Spring和其它有需要的第三方依赖。
 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等。
 绝对没有代码生成,也无需XML配置。

Spring Boot入门

需求:可以在浏览器中访问http://localhost:8080/hello输出一串字符
在Spring boot(1)中已经实现了。
实现步骤:

  1. 创建工程;
  2. 添加依赖(启动器依赖,spring-boot-starter-web);
  3. 创建启动类;
  4. 创建处理器Controller;
  5. 测试

java代码方式配置

目标:可以使用@Value获取配置文件配置项并结合@Bean注册组件到Spring。
java配置主要靠java类和一些注解,比较常用的注解有:

  • @configuration:声明一个类作为配置类,代替xml文件
  • @Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签
  • @value :属性注入
  • @Propertysource:指定外部属性文件

需求:使用Java代码配置数据库连接池,并可以在处理器中注入并使用

步骤:

  1. 添加依赖;
  <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.23</version>
        </dependency>
  1. 创建数据库;(略)

  2. 数据库连接参数的配置文件application.properties;
    在这里插入图片描述

  3. 创建配置类;

package com.itheima.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;

@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {

    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    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;
    }

}

  1. 改造处理器类注入数据源并使用
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;

@RestController
public class HelloController {
    @Autowired
    private DataSource dataSource;

    @RequestMapping("/hello")
    public String hello(){
        //调用业务,接收前端参数
        System.out.println("Datasource" + dataSource);
        return "helloworld";
    }
}

Spring Boot 属性注入方式

目标:能够使用@ConfigurationProperties实现Spring Boot配置文件配置项读取和应用。
上述的@value在读取配置项的时候,读取一次要编写一次,因此在配置项多的时候很麻烦。除此之外,value注解只能读取配置项到基本的类型变量中,不能读取到对象中。
需求:将配置文件中的配置项读取到一个对象中;

实现:可以使用Spring Boot提供的注解@ConfigurationProperties,该注解可以将Spring Boot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中。

实现步骤:

  1. 创建配置项类JdbcProperties类,在该类名上面添加@ConfigurationProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * configurationPropertiss从applicatior配置文件中读取配置项
 * prefix表示配置项的前缀
 * 配置项类中的类变量名必须要与前缀之后的配置项名称保持 松散绑定
 */
@ConfigurationProperties(prefix = "jdbc")
public class JdbcPropertiies {
    private String url;
    private String driverClassName;
    private String root;
    private String password;
    //省略get、set方法。
}

在这里插入图片描述
可能会出现上面的错误,此时需要添加:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
  1. 将jdbc.properties修改名称为application.properties;(按1创建直接会有一个默认的)

  2. 将JdbcProperties对象注入到JdbcConfig;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


import javax.sql.DataSource;

@Configuration
//@PropertySource("classpath:application.properties")
@EnableConfigurationProperties(JdbcPropertiies.class)
public class JdbcConfig {

    @Bean
    public DataSource dataSource(JdbcPropertiies jdbcProperties){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(jdbcProperties.getDriverClassName());
        dataSource.setUrl(jdbcProperties.getUrl());
        dataSource.setUsername(jdbcProperties.getUsername());
        dataSource.setPassword(jdbcProperties.getPassword());
        return dataSource;
    }

}

  1. 测试

除此之外,事实上,如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties,将该类上的所有注
解去掉)中。而是直接在需要的地方声明即可;再次修改Jdbcconfig类为如下代码:
在这里插入图片描述
小结:
 使用@ConfigurationProperties编写配置项类将配置文件中的配置项设置到对象中
 使用@configurationProperties在方法上面使用

多个yml文件配置

目标:可以将多个yml文件在application.yml文件中配置激活
配置文件除了可以使用application.properties类型,还可以使用后缀名为: .yml或者.yaml的类型,也就是:abplication.yml或者application.yaml。

yaml基本格式:
Key:空格 value

yaml与properties配置文件除了展示形式不相同以外,其它功能和作用都是一样的;在项目中原来的读取方式不需要改变。
1)yml配置文件的特征:

  1. 树状层级结构展示配置项;
  2. 配置项之间如果有关系的话需要分行空两格;
  3. 配置项如果有值的话,那么需要在 :之后空一格再写配置项值;

将application.properties配置文件修改为application.yml的话:

jdbc:
  driverClassName: com.mysql.jdbc.Driver
  url: jdbc:mysql://127.0.0.1:3306/heima
  username: root
  password: root

2)多个yml配置文件;在spring boot中是被允许的。这些配置文件的名称必须为application-***.yml,并且这些配置文件必须要在application.yml配置文件中激活之后才可以使用。

#激活配置文件;需要指定其它的配置文件名称
spring:
  profiles:
    active: **,**

3)如果properties和yml配置文件同时存在在spring boot项目中;那么这两类配置文件都有效。在两个配置文件中如果存在同名的配置项的话会以properties文件的为主。
4)yaml的几种写法
在这里插入图片描述

yaml可以给实体类赋值

自动配置原理

简单版本:Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。
详细的可以参考自动配置原理

lombok应用:

目标:使用lombok的注解实现pojo类的简化。
分析

使用Spring Boot整合SSM工程;需要使用到数据库数据。

  • 将数据库表数据导入到数据库中;

  • 编写数据库表对应的实体类;一般情况下需要编写get/set/toString等这些方法会耗时并且会让实体类看起来比较臃肿。可以使用lombok插件对实体类进行简化。

    lombok是一个插件工具类包;提供了一些注解@Data、@Getter等这些注解去简化实体类中的构造方法、get/set等方法的编写。

    1. 在IDEA中安装lombok插件;
    2. 添加lombok对应的依赖到项目pom.xml文件;
<dependency>
           <groupId>org.projectlombok</groupId>
           <artifactId>lombok</artifactId>
       </dependency>
  1. 改造实体类使用lombok注解。
import lombok.Data;

@Data
public class user {
    private int id;
    private String name;
    private long pwd;
}

在Bean上使用:
@Data :自动提供getter和setter、hashCode、equals、toString等方法
@Getter:自动提供getter方法
@Setter:自动提供setter方法
@Slf4j:自动在bean中提供log变量,其实用的是slf4j的日志功能。

Spring Boot整合事务和连接池

目标:配置Spring Boot自带默认的hikari数据库连接池和使用@Transactional注解进行事务配置。
分析

  • 事务配置

    1. 添加事务相关的启动器依赖,mysql相关依赖;
      首先要找到SpringBoot提供的启动项,添加如下依赖:
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

添加数据库驱动,添加如下依赖:

 <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
  1. 编写业务类UserService使用事务注解@Transactional
  • 数据库连接池hikari配置

    只需要在application配置文件中指定数据库相关参数

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/*****
    username: ****
    password: ****

Spring Boot整合-Mybatis

目标:配置Mybatis在Spring Boot工程中的整合包,设置mybatis的实体类别名,输出执行sql语句配置项

分析

  1. 添加启动器依赖;
  		<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
  1. 配置Mybatis:实体类别名包,日志,映射文件等;
  mybatis:
    # 实体类别名包路径
    type-aliases-package: ********
    # 映射文件路径
     mapper-locations: classpath:mappers/*.xml
    configuration:
      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  1. 配置MapperScan
    创建一个业务接口类Mapper。
    然后在启动项里添加@MapperScan(“文件路径”)
    在这里插入图片描述

12. Spring Boot整合-通用Mapper

目标:配置通用Mapper组件到Spring Boot项目中并使用Mapper接口

分析

通用Mapper:可以实现自动拼接sql语句;所有的mapper都不需要编写任何方法也就是不用编写sql语句。可以提高开发效率。

  1. 添加启动器依赖;
<dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
  1. 改造UserMapper继承Mapper;

  2. 修改启动引导类Application中的Mapper扫描注解;

  3. 修改User实体类添加jpa注解;

  4. 改造UserService实现业务功能;

小结

在启动引导类上面的mapper扫描注解 一定要修改为 通用mapper的扫描注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值