SpringBoot企业常用的starter

Editor:SimpleWu

SpringBoot简介

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

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

Spring Boot的主要优点:

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

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

SpringBoot运行

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

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

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

  1. <!--引入SpringBoot父依赖-->
  2. <parent>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-parent</artifactId>
  5. <version>2.0.5.RELEASE</version>
  6. <relativePath/>
  7. </parent>
  8. <!--编码与JAVA版本-->
  9. <properties>
  10. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  11. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  12. <java.version>1.8</java.version>
  13. </properties>

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

  1. <dependencies>
  2. <!--引入SpringBoot-WEB模块-->
  3. <dependency>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-web</artifactId>
  6. </dependency>
  7. </dependencies>

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

  1. @SpringBootApplication
  2. public class SpringbootFirstExperienceApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(SpringbootFirstExperienceApplication.class, args);
  5. }
  6. }

到了这里我们直接把他当成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

引入依赖:

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.2.RELEASE</version>
  5. </parent>
  6. <dependencies>
  7. <!--引入WEB模块-->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <!--引入JDBC模块-->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-jdbc</artifactId>
  16. </dependency>
  17. <!--引入数据库驱动-->
  18. <dependency>
  19. <groupId>mysql</groupId>
  20. <artifactId>mysql-connector-java</artifactId>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-test</artifactId>
  25. <scope>test</scope>
  26. </dependency>
  27. </dependencies>

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

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

使用方式:

  1. @Service
  2. public class EmployeeService {
  3. @Autowired
  4. private JdbcTemplate jdbcTemplate;
  5. public boolean saveEmp(String name,String email,String gender){
  6. String sql = "insert into tal_employee values(null,?,?,?)";
  7. int result = jdbcTemplate.update(sql, name,email,gender);
  8. System.out.println("result : " + result);
  9. return result > 0 ? true:false;
  10. }
  11. }
  1. @RestController
  2. public class EmployeeController {
  3. @Autowired
  4. private EmployeeService employeeService;
  5. @RequestMapping("/save")
  6. public String insert(String name,String email,String gender){
  7. boolean result = employeeService.saveEmp(name, email, gender);
  8. if(result){
  9. return "success";
  10. }
  11. return "error";
  12. }
  13. }

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

@RestController

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

整合JSP

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

引入依赖:

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.2.RELEASE</version>
  5. </parent>
  6. <dependencies>
  7. <!-- SpringBoot WEB组件 -->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <!-- 整合JSP依赖 -->
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-tomcat</artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.apache.tomcat.embed</groupId>
  19. <artifactId>tomcat-embed-jasper</artifactId>
  20. </dependency>
  21. </dependencies>

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

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

整合JPA

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

添加依赖:

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.2.RELEASE</version>
  5. </parent>
  6. <dependencies>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>
  11. <!--启动JPA组件-->
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-data-jpa</artifactId>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.springframework.boot</groupId>
  18. <artifactId>spring-boot-starter-test</artifactId>
  19. <scope>test</scope>
  20. </dependency>
  21. <dependency>
  22. <groupId>mysql</groupId>
  23. <artifactId>mysql-connector-java</artifactId>
  24. </dependency>
  25. </dependencies>

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

Application.properties

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

实体类:Employee.java

  1. @Table(name="tal_employee")
  2. @Entity
  3. public class Employee implements Serializable{
  4. @Id
  5. @GeneratedValue(strategy = GenerationType.AUTO)
  6. private Integer id;
  7. @Column(name="last_Name")
  8. private String lastName;
  9. private String email;
  10. private String gender;
  11. //get set 省略
  12. }

EmployeeDao接口:

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

EmployeeController.java:

  1. @Controller
  2. public class EmployeeController {
  3. @Autowired
  4. private EmployeeDao employeeDao;
  5. @ResponseBody
  6. @RequestMapping("/emps")
  7. public List<Employee> getEmployees(){
  8. List<Employee> employees = employeeDao.findAll();
  9. System.out.println(employees);
  10. return employees;
  11. }
  12. }

整合MyBatis

引入依赖:

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.2.RELEASE</version>
  5. </parent>
  6. <dependencies>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>
  11. <!--引入对JDBC的支持-->
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-jdbc</artifactId>
  15. </dependency>
  16. <!--引入对logging的支持-->
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-logging</artifactId>
  20. </dependency>
  21. <!-- SpringBoot MyBatis启动器 -->
  22. <dependency>
  23. <groupId>org.mybatis.spring.boot</groupId>
  24. <artifactId>mybatis-spring-boot-starter</artifactId>
  25. <version>1.2.2</version>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId>mysql</groupId>
  34. <artifactId>mysql-connector-java</artifactId>
  35. </dependency>
  36. </dependencies>

配置application.properties

  1. spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
  2. spring.datasource.username=root
  3. spring.datasource.password=root
  4. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
  5. ##############datasource classpath 数据连接池地址##############
  6. #spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
  7. #指定我们的mapper.xml位置
  8. mybatis.mapper-locations=classpath:com/simple/springboot/mybatis/dao/mapper/*.xml
  9. #entity.class 指定我们实体类所在包位置
  10. mybatis.type-aliases-package=com.simple.springboot.mybatis.entity

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

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

AOP功能使用

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

  1. package com.simple.springboot.aop;
  2. import org.aspectj.lang.ProceedingJoinPoint;
  3. import org.aspectj.lang.annotation.After;
  4. import org.aspectj.lang.annotation.AfterThrowing;
  5. import org.aspectj.lang.annotation.Around;
  6. import org.aspectj.lang.annotation.Aspect;
  7. import org.aspectj.lang.annotation.Before;
  8. import org.aspectj.lang.annotation.Pointcut;
  9. import org.springframework.stereotype.Component;
  10. @Aspect
  11. @Component
  12. public class SpringBootAspect {
  13. /**
  14. * 定义一个切入点
  15. * @author:SimpleWu
  16. * @Date:2018年10月12日
  17. */
  18. @Pointcut(value="execution(* com.simple.springboot.util.*.*(..))")
  19. public void aop(){}
  20. /**
  21. * 定义一个前置通知
  22. * @author:SimpleWu
  23. * @Date:2018年10月12日
  24. */
  25. @Before("aop()")
  26. public void aopBefore(){
  27. System.out.println("前置通知 SpringBootAspect....aopBefore");
  28. }
  29. /**
  30. * 定义一个后置通知
  31. * @author:SimpleWu
  32. * @Date:2018年10月12日
  33. */
  34. @After("aop()")
  35. public void aopAfter(){
  36. System.out.println("后置通知 SpringBootAspect....aopAfter");
  37. }
  38. /**
  39. * 处理未处理的JAVA异常
  40. * @author:SimpleWu
  41. * @Date:2018年10月12日
  42. */
  43. @AfterThrowing(pointcut="aop()",throwing="e")
  44. public void exception(Exception e){
  45. System.out.println("异常通知 SpringBootAspect...exception .." + e);
  46. }
  47. /**
  48. * 环绕通知
  49. * @author:SimpleWu
  50. * @throws Throwable
  51. * @Date:2018年10月12日
  52. */
  53. @Around("aop()")
  54. public void around(ProceedingJoinPoint invocation) throws Throwable{
  55. System.out.println("SpringBootAspect..环绕通知 Before");
  56. invocation.proceed();
  57. System.out.println("SpringBootAspect..环绕通知 After");
  58. }
  59. }

任务调度

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

  1. @Component
  2. public class ScheduledTasks {
  3. private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
  4. /**
  5. * 任务调度,每隔5秒执行一次
  6. * @author:SimpleWu
  7. * @Date:2018年10月12日
  8. */
  9. @Scheduled(fixedRate = 1000)
  10. public void reportCurrentTime() {
  11. System.out.println("现在时间:" + dateFormat.format(new Date()));
  12. }
  13. }

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

  1. /**
  2. * SpringBoot使用任务调度
  3. * @EnableScheduling标注程序开启任务调度
  4. * @author :SimpleWu
  5. * @Date:2018年10月12日
  6. */
  7. @SpringBootApplication
  8. @EnableScheduling
  9. public class App {
  10. public static void main(String[] args) {
  11. SpringApplication.run(App.class, args);
  12. }
  13. }

整合RabbitMq

安装RabbitMq

由于RabbitMQ依赖Erlang, 所以需要先安装Erlang。

  1. sudo yum install -y make gcc gcc-c++ m4 openssl openssl-devel ncurses-devel unixODBC unixODBC-devel java java-devel
  2. sudo yum install epel-release
  3. sudo yum install erlang
  4. sudo yum install socat

下载RabbitMQ,并且安装

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

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

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

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

  1. rm rabbit\@rabbit@localhost-sasl.log

最好还是直接sudo rabbitmqctl set_user_tags root administrator ,给root用户赋值管理员权限

RabbitMQ,基本操作

  1. # 添加开机启动RabbitMQ服务
  2. systemctl enable rabbitmq-server.service
  3. # 查看服务状态
  4. systemctl status rabbitmq-server.service
  5. # 启动服务
  6. systemctl start rabbitmq-server.service
  7. # 停止服务
  8. systemctl stop rabbitmq-server.service
  9. # 查看当前所有用户
  10. rabbitmqctl list_users
  11. # 查看默认guest用户的权限
  12. rabbitmqctl list_user_permissions guest
  13. # 由于RabbitMQ默认的账号用户名和密码都是guest。为了安全起见, 先删掉默认用户
  14. rabbitmqctl delete_user guest
  15. # 添加新用户
  16. rabbitmqctl add_user username password
  17. # 设置用户tag
  18. rabbitmqctl set_user_tags username administrator
  19. # 赋予用户默认vhost的全部操作权限
  20. rabbitmqctl set_permissions -p / username ".*" ".*" ".*"
  21. # 查看用户的权限
  22. rabbitmqctl list_user_permissions username

如果只从命令行操作RabbitMQ,多少有点不方便。幸好RabbitMQ自带了web管理界面,只需要启动插件便可以使用。

  1. rabbitmq-plugins enable rabbitmq_management

访问: http://服务器IP:15672

整合RabbitMq

导入Maven依赖

  1. <!--SpringBoot2.x-->
  2. <parent>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-parent</artifactId>
  5. <version>2.1.4.RELEASE</version>
  6. <relativePath/> <!-- lookup parent from repository -->
  7. </parent>
  8. <!--设置JAVA版本-->
  9. <properties>
  10. <java.version>1.8</java.version>
  11. </properties>
  12. <!--引入依赖-->
  13. <dependencies>
  14. <!--启动RabbitmQ-->
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-amqp</artifactId>
  18. </dependency>
  19. <!--启动WEB-->
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <!--启动TEST-->
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-test</artifactId>
  28. <scope>test</scope>
  29. </dependency>
  30. </dependencies>

设置application.properties配置文件

  1. spring.application.name=springboot-rabbitmq
  2. #RabbitMq所在服务器IP
  3. spring.rabbitmq.host=192.168.197.133
  4. #连接端口号
  5. spring.rabbitmq.port=5672
  6. #用户名
  7. spring.rabbitmq.username=root
  8. #用户密码
  9. spring.rabbitmq.password=123456
  10. # 开启发送确认
  11. spring.rabbitmq.publisher-confirms=true
  12. # 开启发送失败退回
  13. spring.rabbitmq.publisher-returns=true
  14. spring.rabbitmq.virtual-host=/

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

  1. /**
  2. * @author SimpleWu
  3. * @Date 2019-05-17
  4. * 该类初始化队列
  5. */
  6. @Configuration
  7. public class RabbitMqInitialization {
  8. /**
  9. * 创建队列 队列名字为SayQueue
  10. * @return
  11. */
  12. @Bean
  13. public Queue SayQueue() {
  14. return new Queue("SayQueue");
  15. }
  16. }

创建生产者

  1. /**
  2. * @author SimpleWu
  3. * @Date 2019-05-17
  4. * 生产者
  5. */
  6. @Component
  7. public class SayProducer {
  8. @Autowired
  9. private RabbitTemplate rabbitTemplate;
  10. public void send(String name){
  11. String sendMsg = "hello: " + name + " " + new Date();
  12. //指定队列
  13. this.rabbitTemplate.convertAndSend("SayQueue", sendMsg);
  14. }
  15. }

创建消费者

@RabbitListener:当监听到队列 SayQueue 中有消息时则会进行接收并处理

@RabbitHandler :标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型

  1. /**
  2. * @author SimpleWu
  3. * @Date 2019-05-17
  4. * 消费者
  5. * queues 指定监听的队列
  6. */
  7. @Component
  8. @RabbitListener(queues = "SayQueue")
  9. public class SayConsumer {
  10. @RabbitHandler
  11. public void process(String hello) {
  12. System.out.println("SayConsumer : " + hello);
  13. }
  14. }

创建接口进行测试

  1. @RestController
  2. public class SayController {
  3. @Autowired
  4. private SayProducer sayProducer;
  5. @RequestMapping("/send/{name}")
  6. public String send(@PathVariable String name){
  7. sayProducer.send(name);
  8. return "Send Succcess SimpleWu";
  9. }
  10. }

启动类就用IDEA默认生成的就好了。

http://10.192.132.22:8080/send/First 发送请求

消费者接受消息:SayConsumer : hello: First Tue May 07 17:57:02 CST 2019

注:在传输对象时一定要序列化

整合邮件发送

导入依赖

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

配置Properties文件

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

spring.mail.host 需要根据不同的邮箱类型配置不同的服务器地址

发送邮箱

  1. /**
  2. * @author SimpleWu
  3. * @data 2019=05-17
  4. * 发送邮件
  5. */
  6. @Component
  7. public class EmailService {
  8. @Autowired
  9. private JavaMailSender javaMailSender;
  10. public void sendSimpleMail(){
  11. MimeMessage message = null;
  12. try {
  13. message = javaMailSender.createMimeMessage();
  14. MimeMessageHelper helper = new MimeMessageHelper(message, true);
  15. helper.setFrom("450255266@qq.com");
  16. helper.setTo("450255266@qq.com");
  17. helper.setSubject("标题:发送Html内容");
  18. StringBuffer context = new StringBuffer();
  19. context.append("<p style='color:red'>");
  20. context.append("Hello SpringBoot Email Start SimpleWu!!");
  21. context.append("</p>");
  22. helper.setText(context.toString(),true);//设置true发送html邮件
  23. //带附件
  24. //FileSystemResource fileSystemResource=new FileSystemResource(new File("D:\2019-05-07.pdf"));
  25. //helper.addAttachment("邮箱附件",fileSystemResource);
  26. javaMailSender.send(message);
  27. } catch (MessagingException e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. }

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

SpringBoot整合篇的更多相关文章

  1. SpringBoot非官方教程 | 第九篇: springboot整合Redis

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot9-redis/ 本文出自方志朋的博客 这篇文章主 ...

  2. jackson学习之十(终篇):springboot整合(配置类)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. Canal 实战 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存

    一. Canal 简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同 ...

  4. Springboot 整合RabbitMq ,用心看完这一篇就够了

    该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct.Topic.Fanout的使用,消息回调.手动确认等. (但是 ...

  5. SpringBoot整合Mybatis之进门篇

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  6. SpringBoot整合ActiveMQ,看这篇就够了

    ActiveMQ是Apache提供的一个开源的消息系统,完全采用Java来实现,因此它能很好地支持JMS(Java Message Service,即Java消息服务)规范:本文将详细介绍下Activ ...

  7. 【使用篇二】SpringBoot整合Listener(3)

    两种方式: 通过注解扫描完成 Listener 组件的注册 通过方法完成 Listener 组件注册 一.通过注解扫描完成 Listener 组件的注册 1. 编写Listener类 /*** spr ...

  8. 【使用篇二】SpringBoot整合Filter(2)

    两种方式: 通过注解扫描完成 Filter 组件的注册 通过方法完成 Filter 组件的注册 一.通过注解扫描完成 Filter 组件的注册 1. 编写Filter类 /** * SpringBoo ...

  9. 【使用篇二】SpringBoot整合Servlet(1)

    两种方式: 通过注解扫描完成 Servlet组件的注册 通过方法完成 Servlet组件的注册 一.通过注解扫描完成 Servlet 组件的注册 1. 编写Servlet类 /** * SpringB ...

随机推荐

  1. 章节七、6-Map集合的区别

    一.通过entrySet取出Map中的元素 package ZangJie7; import java.util.HashMap; import java.util.Map; public class ...

  2. 页面间固定参数,通过cookie传值

    最后在做的页面,比如用户数据(用户头像,名称,年龄)这些信息,因为大部分页面都要用,之前是通过url地址传,另一页面接收.考虑到这样做会让url过长,因此,尝试使用cookie,把固定的值保存在coo ...

  3. 使用VSTS的Git进行版本控制(二)——提交保存工作

    使用VSTS的Git进行版本控制(二)--提交保存工作 当对文件进行更改时,Git将在本地仓库中记录更改.可以通过选择变更来提交的对应更改.提交总是针对本地的Git仓库,因此不必担心提交是完美的,或者 ...

  4. MyBatis笔记----(2017年)最新的报错:Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [com/ij34/mybatis/applicationContext.xml]; nested e

    四月 05, 2017 4:56:11 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRef ...

  5. mssql 一次向表中插入多条数据的方法分享 (转自:http://www.maomao365.com/?p=6058)

    转自:http://www.maomao365.com/?p=6058) <span style="font-size:16px;font-weight:bold;"> ...

  6. c/c++求解图的关键路径 critical path

    c/c++求解图的关键路径 critical path 上图表示一个工程,工程以V1为起始子工程,V9为终止子工程. 由图可以看出,要开工V5工程,必须在完成工程V2和V3后才可以. 完成V2需要a1 ...

  7. Windows Server 2016-域站点链接及子网调整

    很多情况下我们在判别域控间或者域中各站点同步是否正常往往的操作内容就是查看两台域控间PING或者解析是否正常,或者查看双方防火墙是否关闭,但实际情况下我们需要注意的是,保证站点间Active Dire ...

  8. March 09th, 2018 Week 10th Friday

    All good things must come to an end. 好景无常. Love is when the other person's happiness is more importa ...

  9. 小程序View内的文字不换行

    今天发现View内的文字一行过去直接被屏幕右边吃掉,没有预期的换行,设置width也不管用,最后用它解决了 1. white-space:pre-line(不会保留空白和tabs) 2. white- ...

  10. 在Intellij IDEA下通过Hibernate逆向生成实体类

    前言:在IDEA中,通过相关插件,可以利用Hibernate逆向生成数据表对应的实体类.具体操作及注意事项见本篇随笔. 1.创建一个基于maven的hibernate工程.并在工程中添夹hiberna ...