SpringBoot 整合篇

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> SpringBoot 整合篇

题外话:欢迎将公众号设置为星标,技术文章第一时间看到。我们将一如既往精选技术好文,提供有价值的阅读。如有读者想要投稿,可以在公众号任意文章下留言,技术博主奖励丰厚。

阅****读

1. 

****2. ****

3. 

****4. ****

SpringBoot简介

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

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

Spring Boot的主要优点:

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

    没有冗余代码生成和XML配置的要求

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

    SpringBoot运行

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

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

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

    
    !--引入SpringBoot父依赖--
    parent
            groupIdorg.springframework.boot/groupId
            artifactIdspring-boot-starter-parent/artifactId
            version2.0.5.RELEASE/version
            relativePath/ 
    /parent
    !--编码与JAVA版本--
    properties
            project.build.sourceEncodingUTF-8/project.build.sourceEncoding
            project.reporting.outputEncodingUTF-8/project.reporting.outputEncoding
            java.version1.8/java.version
    /properties
    

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

    
    dependencies
            !--引入SpringBoot-WEB模块--
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-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;

    SpringBoot目录结构

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

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

    application.properties:这个文件名字是固定的,SpringBoot启动会默认加载这些配置在这里面可以配置端口号,访问路径,数据库连接信息等等。这个文件非常重要,当然官方中推出了一个yml格式这是非常强大的数据格式。

    整合JdbcTemplate

    引入依赖:

    
     parent
            groupIdorg.springframework.boot/groupId
            artifactIdspring-boot-starter-parent/artifactId
            version1.5.2.RELEASE/version
        /parent
        dependencies
            !--引入WEB模块--
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-web/artifactId
            /dependency
             !--引入JDBC模块--
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-jdbc/artifactId
            /dependency
             !--引入数据库驱动--
            dependency
                groupIdmysql/groupId
                artifactIdmysql-connector-java/artifactId
            /dependency
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-test/artifactId
                scopetest/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.Driver
    

    使用方式:

    
    @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格式返回。

    整合JSP

    在创建整合JSP的时候指定要选WAR,一定要选WAR。

    引入依赖:

    
    parent
        groupIdorg.springframework.boot/groupId
        artifactIdspring-boot-starter-parent/artifactId
        version1.5.2.RELEASE/version
    /parent
    dependencies
        !-- SpringBoot WEB组件 --
        dependency
            groupIdorg.springframework.boot/groupId
            artifactIdspring-boot-starter-web/artifactId
        /dependency
        !-- 整合JSP依赖 --
        dependency
            groupIdorg.springframework.boot/groupId
            artifactIdspring-boot-starter-tomcat/artifactId
        /dependency
        dependency
            groupIdorg.apache.tomcat.embed/groupId
            artifactIdtomcat-embed-jasper/artifactId
        /dependency
    /dependencies
    

    然后我们只需要配置试图解析器路径就可以了。

    
    #配置试图解析器前缀
    spring.mvc.view.prefix=/WEB-INF/views/
    #配置试图解析器后缀
    spring.mvc.view.suffix=.jsp
    

    整合JPA

    同样的整合JPA我们只需要启动我们SpringBoot已经集成好的模块即可。

    添加依赖:

    
    parent
            groupIdorg.springframework.boot/groupId
            artifactIdspring-boot-starter-parent/artifactId
            version1.5.2.RELEASE/version
        /parent
        dependencies
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-web/artifactId
            /dependency
            !--启动JPA组件--
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-data-jpa/artifactId
            /dependency
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-test/artifactId
                scopetest/scope
            /dependency
            dependency
                groupIdmysql/groupId
                artifactIdmysql-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 JpaRepositoryEmployee, Integer{
    }
    

    EmployeeController.java:

    
    @Controller
    public class EmployeeController {
        @Autowired
        private EmployeeDao employeeDao;
    
        @ResponseBody
        @RequestMapping("/emps")
        public ListEmployee getEmployees(){
            ListEmployee employees = employeeDao.findAll();
            System.out.println(employees);
            return employees;
        }
    }
    

    整合MyBatis

    引入依赖:

    
    parent
            groupIdorg.springframework.boot/groupId
            artifactIdspring-boot-starter-parent/artifactId
            version1.5.2.RELEASE/version
        /parent
        dependencies
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-web/artifactId
            /dependency
            !--引入对JDBC的支持--
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-jdbc/artifactId
            /dependency
             !--引入对logging的支持--
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-logging/artifactId
            /dependency
            !-- SpringBoot MyBatis启动器 --
            dependency
                groupIdorg.mybatis.spring.boot/groupId
                artifactIdmybatis-spring-boot-starter/artifactId
                version1.2.2/version
            /dependency
            dependency
                groupIdorg.springframework.boot/groupId
                artifactIdspring-boot-starter-test/artifactId
                scopetest/scope
            /dependency
            dependency
                groupIdmysql/groupId
                artifactIdmysql-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
    
    #指定我们的mapper.xml位置
    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功能使用

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

    
    package com.simple.springboot.aop;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    @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");
        }
    }
    

    任务调度

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

    
    @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);
        }
    }
    

    本文所有测试代码实例:

    https://gitlab.com/450255266/code

    SpringBoot 整合篇
    本文作者:SimpleWu cnblogs.com/SimpleWu/p/9798146.html
    SpringBoot 整合篇

    原文始发于微信公众号(后端技术精选):

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> SpringBoot 整合篇


      转载请注明: 好好学java SpringBoot 整合篇

     上一篇
    Spring Boot整合JWT实现用户认证(附源码) Spring Boot整合JWT实现用户认证(附源码)
    点击上方“Java知音”,选择“置顶公众号” 技术文章第一时间送达! 作者:LTLAYX https://dwz.cn/yv1Do6e3 推荐阅****读 1.  ****2. **** 3.  ****4. **** 初探
    下一篇 
    使用lombok编写优雅的Bean对象 使用lombok编写优雅的Bean对象
    题外话:欢迎将公众号设置为星标,技术文章第一时间看到。我们将一如既往精选技术好文,提供有价值的阅读。如有读者想要投稿,可以在公众号任意文章下留言,技术博主奖励丰厚。 推荐阅****读 1.  ****2. **** 3.  ****4. *