Spring Boot企业级开发教程 第9章 SpringBoot任务管理
- 格式:ppt
- 大小:2.67 MB
- 文档页数:30
《Spring Boot企业级开发教程》课程教学大纲(课程英文名称)课程编号: XXXX学分:5学分学时:60学时(其中:讲课学时:38 上机学时:22)先修课程:Java基础案例教程、Java Web程序设计任务教程、Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)适用专业:信息及其计算机相关专业开课部门:计算机系一、课程的性质与目标《Spring Boot企业级开发教程》是面向计算机相关专业开设的一门专业的Java 应用开发课程,主要讲解了当前主流的Spring Boot框架以及与第三方技术整合开发实战内容。
通过本课程的学习,学生能够理解并掌握Spring Boot 框架的基础知识,同时能够掌握Spring Boot与常用第三方技术的整合实现实际开发中的业务需求,包括实现Web开发、数据访问、缓存管理、安全管理、消息服务、任务管理等。
二、课程的主要内容及基本要求第1章 Spring Boot开发入门(4学时)[知识点]➢Spring Boot概述➢环境准备➢使用Maven方式构建Spring Boot项目➢使用Spring Initializr方式构建Spring Boot项目➢单元测试➢热部署➢Spring Boot依赖管理➢Spring Boot自动配置➢Spring Boot执行流程[重点]➢使用Maven方式构建Spring Boot项目➢使用Spring Initializr方式构建Spring Boot项目➢单元测试➢Spring Boot依赖管理➢Spring Boot自动配置➢Spring Boot执行流程[难点]➢Spring Boot自动配置➢Spring Boot执行流程[基本要求]➢了解Spring Boot的发展和优点➢掌握Spring Boot项目的构建➢掌握Spring Boot的单元测试和热部署➢熟悉Spring Boot的自动化配置原理➢熟悉Spring Boot的执行流程[实践与练习]建议完成相关测试题,并安排上机,重点考核如何编写Spring Boot入门程序,并参考教材进行Spring Boot源码分析。
【黑马程序员】Spring Boot介绍和使用简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Spring Boot是一种简化原有Spring应用繁杂配置的微框架。
使开发者从繁杂的各种配置文件中解脱出来,通过Spring Boot能够很简单、很快速构建一个优秀的、产品级的Spring基础应用。
运行Spring Boot和运行普通的Java 类一样简单,仅仅run一下Spring Boot的入口main()方法即可开启应用;你也可以把Spring Boot应用打成jar,在命令行执行java -jar xxx.jar命令来运行;或者打成war包部署到服务器下运行服务器来开启应用。
Spring Boot微框架考虑到了Spring平台和第三方库的情况,所以你需要做的则是最少的操作或配置。
Spring Boot的特点:1. 创建独立的Spring应用程序2. 嵌入的Tomcat,无需部署WAR文件3. 简化Maven配置4. 自动配置Spring5. 绝对没有代码生成并且对XML也没有配置要求Spring boot的使用1.在ide中打开工程,这里使用的ide是idea,工程的目录结构为:2、maven配置文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd /maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.springboot.sample</groupId><artifactId>spring-boot-sample</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>spring-boot-sample</name><description>Spring Boot Sample Web Application</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.2.RELEASE</version><relativePath /></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MYSQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Spring Boot JDBC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>3.配置好了pom后,我们一起看下自动生成的Application.java这个类相当于我们程序的main函数入口@SpringBootApplication@ServletComponentScanpublic class SpringBootApplication extends SpringBootServletInitializer {private static final Logger logger = LoggerFactory.getLogger(SpringBootSampleApplication.class);public static void main(String[] args) {SpringApplication.run(SpringBootSampleApplication.class, args);}}。
springboot中的声明式事务管理及编程式事务管理这⼏天在做⼀个功能,具体的情况是这样的: 项⽬中原有的⼏个功能模块中有数据上报的功能,现在需要在这⼏个功能模块的上报之后⽣成⼀条消息记录,然后⼊库,在写个接⼝供前台来拉取消息记录。
看到这个需求,⾸先想到的是使⽤AOP来实现了,然后,我去看了下现有功能模块中的代码,发现了问题,这些模块中的业务逻辑并没有放在service层来处理,直接在controller中处理了,controller中包含了两个甚⾄多个service处理,这样是不能保证事务安全的,既然这样,那么我们如何实现能保证事务安全呢。
我想直接在controller中定义切⼊点,然后before中⼿动开启事务,在afterReturn之后根据需要来提交或者回滚事务。
然后趁着这个机会就查了下spring boot中的事务这块,就从最基础的说起。
1.spring boot中声明式事务的使⽤ 想要在spring boot中使⽤声明式事务,有两种⽅式,⼀种是在各个service层中添加注解,还有⼀种是使⽤AOP配置全局的声明式事务管理 先来说第⼀种,需要⽤到两个注解就,⼀个是@EnableTransactionManagement⽤来开启注解事务管理,等同于xml配置⽅式的 <tx:annotation-driven />,另⼀个是@Transactional 具体代码如下:1package com.example.demo;23import org.springframework.boot.SpringApplication;4import org.springframework.boot.autoconfigure.SpringBootApplication;5import org.springframework.transaction.annotation.EnableTransactionManagement;67// @SpringBootApplication是Sprnig Boot项⽬的核⼼注解,主要⽬的是开启⾃动配置10 @SpringBootApplication11 @EnableTransactionManagement // 启注解事务管理,等同于xml配置⽅式的 <tx:annotation-driven />12public class DemoApplication {14public static void main(String[] args) {16 SpringApplication.run(DemoApplication.class, args);18 }1920 } 然后,注解@Transactional直接加在service层就可以了,放两个service⽤来验证事务是否按预期回滚package com.example.demo.service;import com.example.demo.bean.ResUser;import org.springframework.transaction.annotation.Transactional;import java.util.List;/*** 注解加在接⼝上表名接⼝的所有⽅法都⽀持事务;* 如果加在⽅法上,则只有该⽅法⽀持事务* 可以根据需要在CUD操作上加注解**/@Transactionalpublic interface IUserService {int insertUser(ResUser resUser);int updateUser(ResUser resUser);List<ResUser> getResUserList();}1package com.example.demo.service;23import com.example.demo.bean.ResPartner;4import org.springframework.transaction.annotation.Transactional;56import java.util.List;7import java.util.Map;89 @Transactional10public interface IPartnerService {1112int add(ResPartner resPartner);1314int deleteByIds(String ids);1516int update(ResPartner resPartner);1718 ResPartner queryById(int id);1920 List<ResPartner> queryList(Map<String, Object> params);2122 } 实现类1package com.example.demo.service.impl;23import com.example.demo.bean.ResPartner;4import com.example.demo.dao.PartnerMapperXml;5import com.example.demo.service.IPartnerService;6import org.slf4j.Logger;7import org.slf4j.LoggerFactory;8import org.springframework.beans.factory.annotation.Autowired;9import ponent;1011import java.util.List;12import java.util.Map;1314 @Component("partnerService")15public class PartnerServiceImpl implements IPartnerService {1617private Logger logger = LoggerFactory.getLogger(this.getClass());18 @Autowired19private PartnerMapperXml partnerMapperXml;2021 @Override22public int add(ResPartner resPartner) {23 StringBuilder sbStr = new StringBuilder();24 sbStr.append("id = ").append(resPartner.getId())25 .append(", name = ").append(resPartner.getName())26 .append(", city = ").append(resPartner.getCity())27 .append(", displayName = ").append(resPartner.getDisplayName());(sbStr.toString());29return this.partnerMapperXml.add(resPartner);30 }31 }1package com.example.demo.service.impl;23import com.example.demo.bean.ResPartner;4import com.example.demo.bean.ResUser;5import com.example.demo.dao.PartnerMapperXml;6import com.example.demo.dao.ResUserMapper;7import com.example.demo.service.IUserService;8import org.springframework.beans.factory.annotation.Autowired;9import ponent;1011import java.util.List;1213 @Component("userService")14public class UserServiceImpl implements IUserService {1516 @Autowired17private ResUserMapper resUserMapper;18 @Autowired19private PartnerMapperXml partnerMapperXml;2021 @Override22public int insertUser(ResUser resUser) {2324int i = resUserMapper.insert(resUser);25// ResPartner partner = new ResPartner();26// partner.setId(resUser.getId());27// partner.setName(resUser.getName());28// partner.setDisplayName(resUser.getLogin());29//30// if (true) // ⽤来验证异常,使事务回滚31// throw new RuntimeException("xxxxxxxxxxxxxxx");32// int a = 1/0;33// partnerMapperXml.add(partner);3435return i;36 }3738 } controller代码,JSONMsg是⼀个⾃定义类,就三个属性code,msg,data⽤来给前台返回数据。
第9章Spring中的事务管理技术及实现(第2/3部分)1.1.1Spring框架中与事务管理相关的API1、org.springframework.transaction.PlatformTransactionManager接口(1)PlatformTransactionManager接口的定义【例9-6】PlatformTransactionManager接口定义的代码示例package org.springframework.transaction ;public interface PlatformTransactionManager{void commit(TransactionStatus status);TransactionStatus getTransaction(TransactionDefinition definition);void rollback(TransactionStatus status);}在该接口中,定义了对事务管理和控制的主要的方法,如commit 和rollback等。
开发者借助于该接口的实现类来达到对应用系统中的数据访问组件进行事务管理和控制。
所有Spring的事务分离功能都会委托给PlatformTransactionManager(但实际是传给相应的TransactionDefinition类的对象实例)来做实际的事务执行。
(2)PlatformTransactionManager接口的各个实现类通过查看Spring框架所提供的API帮助文档,可以了解到PlatformTransactionManager接口有下面的几种不同形式的实现类。
之所以提供这么多的不同的实现类,其目的无非还是能够真正实现应用系统与底层的事务资源的无关性,从而也达到实现前面所介绍的Spring事务管理的底层实现是采用对事务资源的抽象设计方案的目标。
1)DataSourceTransactionManager(针对标准的JDBC技术)2)JtaTransactionManager(针对JTA技术)3)HibernateTransactionManager(针对Hibernate O/R Mapping技术)4)JdoTransactionManager(针对JDO技术)5)PersistenceBrokerTransactionManager(针对OJB技术)6)JmsTransactionManager(针对J2EE JMS技术)注意:无论是单个还是多个事务资源管理器,都可以使用JtaTransactionManager类。
《Spring Boot项目开发》课程标准一、课程定位本课程是软件技术专业的专业综合课,主要培养学生的知识应用能力、实践动手能力和软件开发综合能力。
本课程主要培养学生应用Java主流框架Spring Boot进行Web应用开发的能力,通过“教、学、做”一体化教学,使学生掌握Spring Boot框架与其他各种技术的整合,并应用此框架进行软件项目开发,培养和提高学生综合项目实践能力,为后续课程及毕业设计、企业顶岗实习等做好准备。
先修课程:《程序设计基础》、《JavaWeb应用开发》、《企业级项目开发》后续课程:《综合项目实践》、《毕业设计》等。
二、课程目标(一)总体目标通过对本课程的学习,使学生掌握Java主流框架Spring Boot的基础配置、与数据库操作、Web开发、消息队列、缓存管理、安全机制、任务管理等,学会Spring Boot与其他相关技术的整合,能应用Spring Boot进行软件项目开发,培养学生实践动手能力和综合项目开发能力,为今后从事软件开发相关岗位打下坚实基础。
(二)具体目标课程教学目标具体体现为专业技能、专业知识和专业素质三方面的目标。
(1)专业技能目标①能搭建Spring Boot开发环境;②掌握Spring Boot的基础和核心配置,并能对Spring Boot进行正确配置;③能整合Web开发技术,应用相关视图技术,进行Web应用开发;④能整合持久层框架如MyBatis-Plus等进行数据管理;⑤能整合相关框架进行消息队列处理、缓存管理、安全管理、任务管理等;⑥能使用Spring Boot整合各种框架进行应用系统的开发;⑦能将相关应用项目进行部署发布。
(2)专业知识目标①熟悉搭建Spring Boot开发环境的流程;②掌握Spring Boot基础和核心配置;③熟悉整合持久层框架进行数据处理,进行Web开发并使用相关视图技术;④掌握整合相关框架进行缓存配置、消息队列管理、安全机制及任务管理的知识;⑤掌握项目部署、打包、发布。
SpringBoot中配置定时任务、线程池与多线程池执⾏的⽅法配置基础的定时任务最基本的配置⽅法,⽽且这样配置定时任务是单线程串⾏执⾏的,也就是说每次只能有⼀个定时任务可以执⾏,可以试着声明两个⽅法,在⽅法内写⼀个死循环,会发现⼀直卡在⼀个任务上不动,另⼀个也没有执⾏。
1、启动类添加@EnableScheduling开启对定时任务的⽀持@EnableScheduling@SpringBootApplicationpublic class TestScheduledApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(this.getClass());}public static void main(String[] args) {new SpringApplicationBuilder(TestScheduledApplication.class).web(true).run(args);}}2、配置执⾏定时任务的类添加@Component扫描本类,在⽅法上添加@Scheduled注解声明定时任务,配置时间周期@Componentpublic class TestTask1 {private static final Logger logger = LogManager.getLogger();// 间隔1秒执⾏⼀次@Scheduled(cron = "0/1 * * * * ?")public void method1() {("——————————method1 start——————————");("——————————method1 end——————————");}}配置线程池执⾏定时任务因为有时候需要执⾏的定时任务会很多,如果是串⾏执⾏会带来⼀些问题,⽐如⼀个很耗时的任务阻塞住了,⼀些需要短周期循环执⾏的任务也会卡住,所以可以配置⼀个线程池来并⾏执⾏定时任务1、配置线程池添加@EnableAsync开启对异步的⽀持@Configuration@EnableAsyncpublic class ExecutorConfig {@Beanpublic Executor executor1() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setThreadNamePrefix("test-schedule2-");executor.setMaxPoolSize(20);executor.setCorePoolSize(15);executor.setQueueCapacity(0);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;}}2、配置定时任务异步执⾏添加@Async注解,表⽰该定时任务是异步执⾏的,因为上⾯线程池配置了名字,所以可以看到打印的⽇志是该线程池中的线程在执⾏任务,如果没有配置线程池的话会默认使⽤SimpleAsyncTaskExecutor,这个异步执⾏器每次都会开启⼀个⼦线程执⾏,性能消耗⽐较⼤,所以最好是⾃⼰配置线程池@Async@Scheduled(cron = "0/1 * * * * ?")public void method1() {("——————————method1 start——————————");("——————————method1 end——————————");}配置多个线程池分别执⾏不同的定时任务因为有些定时任务是⽐较重要的,有些则是不太重要的,想把定时任务分别放到不同的线程池中,也是可以实现的。
SpringBoot一、 Spring介绍1.1 、 SpringBoot 简介在您第 1 次接触和学习 Spring 框架的时候,是否因为其繁杂的配置而退却了?在你第n 次使用 Spring 框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot 来让你更易上手,更简单快捷地构建 Spring 应用!Spring Boot 让我们的 Spring 应用变的更轻量化。
比如:你可以仅仅依靠一个Java 类来运行一个 Spring 引用。
你也可以打包你的应用为jar 并通过使用 java -jar 来运行你的 Spring Web 应用。
Spring Boot 的主要优点:为所有 Spring 开发者更快的入门开箱即用,提供各种默认配置来简化项目配置内嵌式容器简化 Web项目没有冗余代码生成和XML配置的要求本章主要目标完成Spring Boot 基础项目的构建,并且实现一个简单的Http 请求处理,通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。
1.2 、系统要求:Java 7 及以上Spring Framework 4.1.5 本文采用 Java 1.8.0_73及以上、 Spring Boot 1.3.2 调试通过。
二、快速入门2.1 、创建一个Maven 工程名为” springboot-helloworld” 类型为Jar工程项目2.2 、 pom文件引入依赖<parent ><groupId >org.springframework.boot</ groupId ><artifactId>spring-boot-starter-parent</ artifactId<version >1.3.3.RELEASE </ version ></ parent ><dependencies ><! — SpringBoot web组件--><dependency ><groupId >org.springframework.boot</ groupId ><artifactId>spring-boot-starter-web</ artifactId </ dependency ></ dependencies > > >spring-boot-starter-parent 作用在 pom.xml 中引入 spring-boot-start-parent,spring官方的解释叫什么stater poms,它可以提供也就是说依赖管理,引入以后在申明其它dependency 的时候就不需要version了,后面可以看到。
Spring Boot1、什么是 Spring Boot?Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。
2、Spring Boot有哪些优点?减少开发,测试时间和努力。
使用JavaConfig有助于避免使用XML。
避免大量的Maven导入和各种版本冲突。
提供意见发展方法。
通过提供默认值快速开始开发。
没有单独的Web服务器需要。
这意味着你不再需要启动Tomcat,Glassfish或其他任何东西。
需要更少的配置因为没有web.xml文件。
只需添加用@ Configuration注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。
您甚至可以将@Autowired添加到bean方法中,以使Spring自动装入需要的依赖关系中。
基于环境的配置使用这些属性,您可以将您正在使用的环境传递到应用程序:-Dspring.profiles.active = {enviornment}。
在加载主应用程序属性文件后,Spring将在(application{environment} .properties)中加载后续的应用程序属性文件。
3、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?Spring Boot 的核心配置文件是 application 和 bootstrap 配置文件。
application 配置文件这个容易理解,主要用于 Spring Boot 项目的自动化配置。
bootstrap 配置文件有以下几个应用场景。
使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;一些固定的不能被覆盖的属性;一些加密/解密的场景4、Spring Boot 的配置文件有哪几种格式?它们有什么区别?v.properties 和 .yml,它们的区别主要是书写格式不同。
SpringBoot应用开发指南第一章:概述1.1 什么是SpringBoot1.2 SpringBoot的优势第二章:准备工作2.1 JDK的安装与配置2.2 安装IDE2.3 创建SpringBoot项目第三章:配置文件3.1 application.properties文件3.2 YAML文件3.3 多环境配置第四章:依赖管理4.1 Maven介绍4.2 添加依赖4.3 自定义依赖第五章:Web应用开发5.1 创建Controller5.2 请求参数绑定5.3 返回结果处理5.4 异常处理5.5 数据校验第六章:数据库操作6.1 配置数据库连接6.2 使用JdbcTemplate 6.3 使用ORM框架第七章:RESTful API 7.1 设计原则7.2 请求方法7.3 请求路径7.4 参数传递7.5 返回结果7.6 错误处理第八章:缓存8.1 添加缓存依赖8.2 配置缓存8.3 使用缓存注解8.4 缓存管理第九章:安全与权限9.1 用户认证9.2 角色与权限管理9.3 基于Token的认证第十章:单元测试10.1 JUnit介绍10.2 编写单元测试10.3 测试覆盖率10.4 集成测试第十一章:部署与发布11.1 打包应用11.2 配置启动参数11.3 部署到服务器11.4 监控与运维第十二章:性能优化12.1 日志管理12.2 数据库连接池配置12.3 缓存配置12.4 并发控制第十三章:常见问题与解决方案13.1 依赖冲突13.2 内存溢出13.3 性能问题13.4 安全漏洞第十四章:案例分析14.1 电商平台应用14.2 社交媒体应用14.3 在线教育平台应用第十五章:开发经验总结15.1 使用SpringBoot的好处15.2 运用规范和最佳实践15.3 持续学习与进阶通过以上章节的学习,读者将对SpringBoot的应用开发有全面的了解。
每一章节都详细介绍了相关概念、使用方法以及常见问题的解决方案。