专栏首页Java大联盟盘点Spring Boot Starter的主力,看看哪几个是你没用过的

盘点Spring Boot Starter的主力,看看哪几个是你没用过的

作者|SimpleWu

cnblogs.com/SimpleWu/p/9798146.html

Spring Boot 简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用。

Spring Boot的主要优点:

  • 为所有Spring开发者更快的入门
  • 开箱即用,提供各种默认配置来简化项目配置
  • 内嵌式容器简化Web项目
  • 没有冗余代码生成和XML配置的要求

在下面的代码中只要有一定基础会发现这写代码实例非常简单对于开发者来说几乎是“零配置”。

Spring Boot 运行

开发工具:jdk8,IDEA,STS,eclipse(需要安装STS插件)这些都支持快速启动SpringBoot工程。我这里就不快速启动了,使用maven工程。学习任何一项技术首先就要精通HelloWord,那我们来跑个初体验。

首先只用maven我们创建的maven工程直接以jar包的形式创建就行了,首先我们来引入SpringBoot的依赖

首先我们需要依赖SpringBoot父工程,这是每个项目中必须要有的。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/>
</parent>
<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
</properties>

我们启动WEB模块当然必须要引入WEB模块的依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>

我们需要编写一个SpringBoot启动类,SpringbootFirstExperienceApplication.java

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

到了这里我们直接把他当成SpringMVC来使用就行了,不过这里默认是不支持JSP官方推荐使用模板引擎,后面会写到整合JSP。这里我就不写Controller了。

@SpringBootApplication:之前用户使用的是3个注解注解他们的main类。分别是@Configuration,@EnableAutoConfiguration,@ComponentScan。由于这些注解一般都是一起使用,spring boot提供了一个统一的注解@SpringBootApplication。

注意事项:我们使用这个注解在不指定扫描路径的情况下,SpringBoot只能扫描到和 SpringbootFirstExperienceApplication 同包或子包的Bean;

Spring Boot 目录结构

在 src/main/resources 中我们可以有几个文件夹:

  • templates:用来存储模板引擎的,Thymeleaf,FreeMarker,Velocity等都是不错的选择。
  • static:存储一些静态资源,css,js 等。
  • public:在默认 Spring Boot 工程中是不生成这个文件夹的,但是在自动配置中我们可以有这个文件夹用来存放公共的资源。
  • application.properties:这个文件名字是固定的,Spring Boot 启动会默认加载这些配置在这里面可以配置端口号,访问路径,数据库连接信息等等。这个文件非常重要,当然官方中推出了一个 yml 格式这是非常强大的数据格式。

整合 JdbcTemplate

引入依赖:

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
         <!--引入JDBC模块-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
         <!--引入数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

配置 application.properties,虽然说是“零配置”但是这些必要的肯定要指定,否则它怎么知道连那个数据库?

spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Drive

使用方式:

@Service
public class EmployeeService {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    public boolean saveEmp(String name,String email,String gender){
        String sql = "insert into tal_employee values(null,?,?,?)";
        int result = jdbcTemplate.update(sql, name,email,gender);
        System.out.println("result : " + result);
        return result > 0 ? true:false;
    }
}
@RestController
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @RequestMapping("/save")
    public String insert(String name,String email,String gender){
        boolean result = employeeService.saveEmp(name, email, gender);
        if(result){
            return "success";
        }
        return "error";
    }
}

这里我们直接返回一个文本格式。

@RestController

在上面的代码中我们使用到这个注解修改我们的 Controller 类而是不使用 @Controller 这个注解,其实中包含了 @Controller,同时包含 @ResponseBody 既然修饰在类上面那么就是表示这个类中所有的方法都是 @ResponseBody 所以在这里我们返回字符串在前台我们会以文本格式展示,如果是对象那么它会自动转换成 JSON 格式返回。

整合 JPA

同样的整合 JPA 我们只需要启动我们 Spring Boot 已经集成好的模块即可,添加依赖:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

启动 JPA 组件后直接配置数据库连接信息就可以使用 JPA 功能。

Application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

实体类:Employee.java

@Table(name="tal_employee")
@Entity
public class Employee implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    @Column(name="last_Name")
    private String lastName;
    private String email;
    private String gender;
    //get set 省略
}

EmployeeDao接口:

public interface EmployeeDao extends JpaRepository<Employee, Integer>{
}

EmployeeController.java:

@Controller
public class EmployeeController {
    @Autowired
    private EmployeeDao employeeDao;

    @ResponseBody
    @RequestMapping("/emps")
    public List<Employee> getEmployees(){
        List<Employee> employees = employeeDao.findAll();
        System.out.println(employees);
        return employees;
    }
}

整合 MyBatis

引入依赖:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入对JDBC的支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
         <!--引入对logging的支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
        <!-- SpringBoot MyBatis启动器 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

配置 application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##############datasource classpath 数据连接池地址##############

#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
mybatis.mapper-locations=classpath:com/simple/springboot/mybatis/dao/mapper/*.xml
#entity.class 指定我们实体类所在包位置
mybatis.type-aliases-package=com.simple.springboot.mybatis.entity

当然这里还有很多属性如果想要使用可以参考官方文档。到了这里其他就不写了,把他当作 SSM 使用就 OK。

注意事项:在我们的 Dao 层接口中一定要在类上加上注解 @Mapper 否则无法扫描到。

AOP 功能使用

在我们 Spring Boot 中使用 AOP 非常简单。

@Aspect
@Component
public class SpringBootAspect {

    /**
     * 定义一个切入点
     * @author:SimpleWu
     * @Date:2018年10月12日
     */
    @Pointcut(value="execution(* com.simple.springboot.util.*.*(..))")
    public void aop(){}

    /**
     * 定义一个前置通知
     * @author:SimpleWu
     * @Date:2018年10月12日
     */
    @Before("aop()")
    public void aopBefore(){
        System.out.println("前置通知 SpringBootAspect....aopBefore");
    }

    /**
    * 定义一个后置通知
     * @author:SimpleWu
     * @Date:2018年10月12日
     */
    @After("aop()")
    public void aopAfter(){
        System.out.println("后置通知  SpringBootAspect....aopAfter");
    }

    /**
     * 处理未处理的JAVA异常
     * @author:SimpleWu
     * @Date:2018年10月12日
     */
    @AfterThrowing(pointcut="aop()",throwing="e")
    public void exception(Exception e){
        System.out.println("异常通知 SpringBootAspect...exception .." + e);
    }

    /**
     * 环绕通知
     * @author:SimpleWu
     * @throws Throwable
     * @Date:2018年10月12日
     */
    @Around("aop()")
    public void around(ProceedingJoinPoint invocation) throws Throwable{
        System.out.println("SpringBootAspect..环绕通知 Before");
        invocation.proceed();
        System.out.println("SpringBootAspect..环绕通知 After");
    }
}

任务调度

Spring Boot 已经集成好一个调度功能。

@Component
public class ScheduledTasks {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    /**
     * 任务调度,每隔5秒执行一次
     * @author:SimpleWu
     * @Date:2018年10月12日
     */

    @Scheduled(fixedRate = 1000)
    public void reportCurrentTime() {
        System.out.println("现在时间:" + dateFormat.format(new Date()));
    }
}

然后启动的时候我们必须要在主函数类上加上注解:@EnableScheduling(翻译过来就是开启调度)

/**
 * SpringBoot使用任务调度
 * @EnableScheduling标注程序开启任务调度 
 * @author :SimpleWu
 * @Date:2018年10月12日
 */

@SpringBootApplication
@EnableScheduling
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

本文分享自微信公众号 - Java大联盟(javaunion)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot整合MyBatis逆向工程

    4. 这样就自动生成了xml,mapper,entity。但是mapper只是个半成品,还需要自定义sql语句。

    南风
  • 自定义fastjson解析+热部署

    今天给大家分享一篇Demi的原创教程,非常感谢这位集美貌与才华于一身的程序猿小姐姐,此处掌声应该再热烈一些。

    南风
  • [有人@我]SSH框架整合教程

    SSH:Struts2+Spring+Hibernate整合的web应用程序开源框架。

    南风
  • 利用 Spring Boot Admin 进行项目监控管理

    Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spring Boot 应用程序。应用程序通过 http 的方式注册到 Sp...

    烂猪皮
  • springboot 非parent方式搭建

    非parent 方式 推荐使用这种方式。 这样就可以使子项目使用 parent 标签了。 这种方式需要两次步骤: 1.paretn 项目配置 2.子项目配置

    潇洒
  • 『互联网架构』软件架构-springcloud邮件监控和总结(106)

    PS:Spring Cloud从设计之初就考虑了绝大多数互联网公司架构演化所需的功能,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。这些功能...

    IT故事会
  • SpringBoot:企业常用的starter

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而...

    Java团长
  • SpringBoot之依赖分析 原

                                                       图1 SpringBoot的模块继承图

    克虏伯
  • Spring Boot2.0 整合mybatis、分页插件、druid

    本文主要是针对SpringBoot2.0.2版本,实现整合mybatis、分页插件、druid等组件,实现完整的web服务,提供restful风格接口。

    kinbug [进阶者]
  • SpringBoot之Admin监控系统

    前言:生产环境用springboot,时常需要监控项目的情况,官方也提供了一些监控接口,例如:/health、/info等等,实际上除了之前提到的信息,还有其他...

    王念博客

扫码关注云+社区

领取腾讯云代金券