SpringBoot企业经常使用的starter

SpringBoot企业经常使用的starter

Editor:SimpleWuhtml

SpringBoot简介

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

Spring Boot让咱们的Spring应用变的更轻量化。好比:你能够仅仅依靠一个Java类来运行一个Spring引用。你也能够打包你的应用为jar并经过使用java -jar来运行你的Spring Web应用。mysql

Spring Boot的主要优势:c++

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

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

SpringBoot运行

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

首先只用maven咱们建立的maven工程直接以jar包的形式建立就好了,首先咱们来引入SpringBoot的依赖sql

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

<!--引入SpringBoot父依赖-->
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> 
</parent>
<!--编码与JAVA版本-->
<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>
        <!--引入SpringBoot-WEB模块-->
        <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;

SpringBoot目录结构

在src/main/resources中咱们能够有几个文件夹:

templates:用来存储模板引擎的,Thymeleaf,FreeMarker,Velocity等都是不错的选择。

static:存储一些静态资源,css,js等

public:在默认SpringBoot工程中是不生成这个文件夹的,可是在自动配置中咱们能够有这个文件夹用来存放公共的资源(html等)

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

整合JdbcTemplate

引入依赖:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.RELEASE</version>
    </parent>
    <dependencies>
        <!--引入WEB模块-->
        <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.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>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>
<dependencies>
    <!-- SpringBoot WEB组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 整合JSP依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
</dependencies>

而后咱们只须要配置试图解析器路径就能够了。

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

整合JPA

一样的整合JPA咱们只须要启动咱们SpringBoot已经集成好的模块便可。

添加依赖:

<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>
        <!--启动JPA组件-->
        <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

#指定咱们的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);
    }
}

整合RabbitMq

安装RabbitMq
因为RabbitMQ依赖Erlang, 因此须要先安装Erlang。

sudo yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel
sudo yum install epel-release
sudo yum install erlang
sudo yum install socat

下载RabbitMQ,而且安装

sudo wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el7.noarch.rpm
sudo yum install rabbitmq-server-3.6.15-1.el7.noarch.rpm

进入cd /etc/rabbitmq/ 建立vim rabbitmq.config

[{rabbit, [{loopback_users, []}]}].

这里的意思是开放使用,rabbitmq默认建立的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问须要添加上面的配置。若是没有找到清除日志

rm rabbit\@rabbit@localhost-sasl.log

最好仍是直接sudo rabbitmqctl set_user_tags root administrator ,给root用户赋值管理员权限
RabbitMQ,基本操做

# 添加开机启动RabbitMQ服务
systemctl enable rabbitmq-server.service
# 查看服务状态
systemctl status  rabbitmq-server.service
# 启动服务
systemctl start rabbitmq-server.service
# 中止服务
systemctl stop rabbitmq-server.service
# 查看当前全部用户
rabbitmqctl list_users
# 查看默认guest用户的权限
rabbitmqctl list_user_permissions guest
# 因为RabbitMQ默认的帐号用户名和密码都是guest。为了安全起见, 先删掉默认用户
rabbitmqctl delete_user guest
# 添加新用户
rabbitmqctl add_user username password
# 设置用户tag
rabbitmqctl set_user_tags username administrator
# 赋予用户默认vhost的所有操做权限
rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
# 查看用户的权限
rabbitmqctl list_user_permissions username

若是只从命令行操做RabbitMQ,多少有点不方便。幸亏RabbitMQ自带了web管理界面,只须要启动插件即可以使用。

rabbitmq-plugins enable rabbitmq_management

访问: http://服务器IP:15672
整合RabbitMq
导入Maven依赖

<!--SpringBoot2.x-->
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<!--设置JAVA版本-->
<properties>
        <java.version>1.8</java.version>
</properties>
<!--引入依赖-->
<dependencies>
        <!--启动RabbitmQ-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <!--启动WEB-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--启动TEST-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>

设置application.properties配置文件

spring.application.name=springboot-rabbitmq
#RabbitMq所在服务器IP
spring.rabbitmq.host=192.168.197.133
#链接端口号
spring.rabbitmq.port=5672
#用户名
spring.rabbitmq.username=root
#用户密码
spring.rabbitmq.password=123456
# 开启发送确认
spring.rabbitmq.publisher-confirms=true
# 开启发送失败退回
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.virtual-host=/

建立RabbitMq队列初始化类,初始化队列

/**
 * @author SimpleWu
 * @Date 2019-05-17
 * 该类初始化队列
 */
@Configuration
public class RabbitMqInitialization {

    /**
     * 建立队列 队列名字为SayQueue
     * @return
     */
    @Bean
    public Queue SayQueue() {
        return new Queue("SayQueue");
    }

}

建立生产者

/**
 * @author SimpleWu
 * @Date 2019-05-17
 * 生产者
 */
@Component
public class SayProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(String name){
        String sendMsg = "hello:    " + name + "   " + new Date();
        //指定队列
        this.rabbitTemplate.convertAndSend("SayQueue", sendMsg);
    }
}

建立消费者
@RabbitListener:当监听到队列 SayQueue 中有消息时则会进行接收并处理
@RabbitHandler :标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪一个方法处理,根据 MessageConverter 转换后的参数类型

/**
 * @author SimpleWu
 * @Date 2019-05-17
 * 消费者
 * queues 指定监听的队列
 */

@Component
@RabbitListener(queues = "SayQueue")
public class SayConsumer {

    @RabbitHandler
    public void process(String hello) {
        System.out.println("SayConsumer  : " + hello);
    }

}

建立接口进行测试

@RestController
public class SayController {

    @Autowired
    private SayProducer sayProducer;

    @RequestMapping("/send/{name}")
    public String send(@PathVariable String name){
        sayProducer.send(name);
        return "Send Succcess SimpleWu";
    }

}

启动类就用IDEA默认生成的就行了。
http://10.192.132.22:8080/send/First 发送请求
消费者接受消息:SayConsumer : hello: First Tue May 07 17:57:02 CST 2019
注:在传输对象时必定要序列化

整合邮件发送

导入依赖

<!--启动邮箱发送依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置Properties文件

#根据类型配置
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=450255266@qq.com
#对于qq邮箱而言 密码指的就是发送方的受权码
spring.mail.password=看不见我-0-
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.mail.default-encoding=UTF-8
#是否用启用加密传送的协议验证项
#注意:在spring.mail.password处的值是须要在邮箱设置里面生成的受权码,这个不是真实的密码。

spring.mail.host 须要根据不一样的邮箱类型配置不一样的服务器地址
发送邮箱

/**
 * @author SimpleWu
 * @data 2019=05-17
 * 发送邮件
 */
@Component
public class EmailService {
    @Autowired
    private JavaMailSender javaMailSender;

    public void sendSimpleMail(){
        MimeMessage message = null;
        try {
            message = javaMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom("450255266@qq.com");
            helper.setTo("450255266@qq.com");
            helper.setSubject("标题:发送Html内容");

            StringBuffer context = new StringBuffer();
            context.append("<p style='color:red'>");
            context.append("Hello SpringBoot Email Start SimpleWu!!");
            context.append("</p>");
            helper.setText(context.toString(),true);//设置true发送html邮件

            //带附件
            //FileSystemResource fileSystemResource=new FileSystemResource(new File("D:\2019-05-07.pdf"));
            //helper.addAttachment("邮箱附件",fileSystemResource);
            javaMailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

注:最好使用异步接口发送邮件,而且发送邮件的服务器为单独部署。

相关文章
相关标签/搜索