简介:介绍SpringBoot2.x课程大纲章节
java基础 jdk环境 maven基础
简介:讲解新版本依赖环境和springboot2新特性概述
简介:使用Maven手工创建SpringBoot2.x应用
手工创建:https://projects.spring.io/spring-boot/#quick-start
官方推荐包命名接口,不要使用默认 defaultPackage
官方文档: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-bootusing-the-default-package 例子:com +- example +- myapplication +- Application.java | +- customer | +- Customer.java | +CustomerController.java | +- CustomerService.java | +- CustomerRepository.java | +- order +Order.java +- OrderController.java +- OrderService.java +- OrderRepository.java
简介:使用构建工具自动生成项目基本架构 工具自动创建:http://start.spring.io/
简介:讲解SpringBoot2.x的默认Maven依赖版本 官网地址
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#appendix-dep endency-versions
简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧
@RestController and @RequestMapping是springMVC的注解,不是springboot特有的
@RestController = @Controller+@ResponseBody
@SpringBootApplication = @Configuration+@EnableAutoConfiguration+@ComponentScan localhost:8080
简介:模拟Http接口测试工具PostMan安装和讲解接口调试工具安装和基本使用
下载地址:https://www.getpostman.com/
简介:讲解springboot接口,http的get请求,各个注解使用
GET请求
1、单一参数@RequestMapping(path = "/{id}", method = RequestMethod.GET)
1) public String getUser(@PathVariable String id ) {} 2)@RequestMapping(path = "/{depid}/{userid}",
method = RequestMethod.GET) 可以同时指定多个提交方法 getUser(@PathVariable("depid") String departmentID,@PathVariable("userid") String userid)
@GetMapping = @RequestMapping(method = RequestMethod.GET)
@PostMapping = @RequestMapping(method = RequestMethod.POST)
@PutMapping = @RequestMapping(method = RequestMethod.PUT) @DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)
可以设置默认值,比如分页
4)@RequestBody 请求体映射实体类 需要指定http头为 content-type为application/json charset=utf-8
@RequestHeader("access_token") String accessToken
简介:讲解http请求post,put, delete提交方式
简介:介绍常用json框架和注解的使用,自定义返回json结构和格式
常用框架 阿里 fastjson,谷歌gson等
JavaBean序列化为Json,
性能:Jackson > FastJson > Gson > Json-lib 同个结构
Jackson、FastJson、Gson类库各有优点,各有自己的专长空间换时间,时间换空间 jackson处理相关自动指定字段不返回:@JsonIgnore
指定日期格式:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss",locale="zh",timezone="GMT+8") 空字段不返回:@JsonInclude(Include.NON_NUll) 指定别名:@JsonProperty
简介:讲解SpringBoot目录文件结构和官方推荐的目录规范 目录讲解
src/main/java:存放代码
src/main/resources static: 存放静态文件,比如 css、js、image, (访问方式 http://localhost:8080/js/main.js) templates:存放静态页面jsp,html,tpl config:存放配置文件,application.properties resources:
引入依赖 Thymeleaf
<dependency>
<groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
//注意:如果不引人这个依赖包,html文件应该放在默认加载文件夹里面,
//比如resources、static、public这个几个文件夹,才可以访问 同个文件的加载顺序,静态资源文件 Spring Boot 默认会挨个从
META/resources > resources > static > public 里面找是否存在相应的资源,如果有则直接返回。
默认配置
官网地址:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-we b-applications.html#boot-features-spring-mvc-static-content spring.resources.static-locations = classpath:/META-
INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 静态资源文件存储在CDN
简介:讲解HTML页面文件上传和后端处理实战
讲解springboot文件上传 MultipartFile file,源自SpringMVC 静态页面直接访问:localhost:8080/index.html
注意点:如果想要直接访问html页面,则需要把html放在springboot默认加载的文件夹下面
MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutStream方便和高效)
访问路径 http://localhost:8080/images/39020dbb-9253-41b9-8ff9-403309ff3f19.jpeg
简介:讲解SpingBoot2.x使用 java -jar运行方式的图片上传和访问处理 文件大小配置,启动类里面配置
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//单个文件最大
factory.setMaxFileSize("10240KB"); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize("1024000KB"); return factory.createMultipartConfig(); }
打包成jar包,需要增加maven依赖
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins> build> 如果没加相关依赖,执行maven打包,运行后会报错:no main manifest attribute, in XXX.jar GUI:反编译工具,作用就是用于把class文件转换成java文件
文件上传和访问需要指定磁盘路径
application.properties中增加下面配置
INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/t est/,file:${web.upload-path}
文件服务器:fastdfs,阿里云oss,nginx搭建一个简单的文件服务器
简介:介绍什么是热部署,使用springboot结合dev-tool工具,快速加载启动应用
官方地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-
SNAPSHOT/reference/htmlsingle/#using-boot-devtools 核心依赖包:
ide添加依赖后,在里面( )重启应用,后续修改后马上可以生效
classloader
不被热部署的文件 1、/META-INF/maven, /META-INF/resources, /resources, /static, /public, or /templates 2、指定文件不进行热部署 spring.devtools.restart.exclude=static/,public/ 3、手工触发重启 spring.devtools.restart.trigger-
file=trigger.txt 改代码不重启,通过一个文本去控制
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#using-boot-devtools-restartexclude
注意点:生产环境不要开启这个功能,如果用java -jar启动,springBoot是不会进行热部署的
简介:SpringBoot2.x常见的配置文件 xml、yml、properties的区别和使用
xml、properties、json、yaml 常见的配置文件 xx.yml, xx.properties,
1)YAML(Yet Another Markup Language) 写 YAML 要比写 XML 快得多(无需关注标签或引号) 使用空格 Space 缩进表示分层,不同层次之间的缩进可以使用不同的空格数目 注意:key后面的冒号,后
面一定要跟一个空格,树状结构 application.properties示例 server.port=8090 server.session-timeout=30 server.tomcat.max-threads=0 server.tomcat.uri-encoding=UTF-8
application.yml示例 server:
port: 8090 session-timeout: 30 tomcat.max-threads: 0 tomcat.uri-encoding: UTF-8 默认示例文件仅作为指导。 不要将整个内容复制并粘贴到您的应用程序中,只挑选您需要的属性。
参考:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#common-appli cation-properties
如果需要修改,直接复制对应的配置文件,加到application.properties里面
简介:讲解使用@value注解配置文件自动映射到属性和实体类
1、配置文件加载 方式一
例子:
@Configuration
@ConfigurationProperties(prefix="test")
@PropertySource(value="classpath:resource.properties") public class ServerConstant {
常见问题:
spring-boot扫描启动类对应的目录和子目录
简介:讲解SpringBoot的单元测试
//1、引入相关依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
//使用
@RunWith(SpringRunner.class) //底层用junit SpringJUnit4ClassRunner @SpringBootTest(classes={XdclassApplication.class})//启动整个springboot工程 public class SpringBootTests { }
简介: 讲解MockMvc类的使用和模拟Http请求实战
>MockMvcResultMatchers验证规则 andReturn:最后返回相应的MvcResult->Response
简介:自定义应用启动的趣味性日志图标和查看调试日志
1)在类路径下增加一个banner.txt,里面是启动要输出的信息 2)在applicatoin.properties增加banner文件的路径地址 spring.banner.location=banner.txt
3)官网地址 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-
SNAPSHOT/reference/htmlsingle/#boot-features-banners
讲解:服务端异常讲解和SpringBoot配置全局异常实战
@ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody
//捕获全局异常,处理所有不可知的异常
@ExceptionHandler(value=Exception.class)
简介:使用SpringBoot自定义异常和错误页面跳转实战
ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("error.html"); modelAndView.addObject("msg", e.getMessage()); return modelAndView;
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#bootfeatures-error-handling
简介:SpringBoot常见启动方式讲解和部署war项目Tomcat
maven插件:
如果没有加,则执行jar包 ,报错如下
java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar no main manifest attribute, in spring-boot-demo-0.0.1-
SNAPSHOT.jar
如果有安装maven 用 mvn spring-boot:run 项目结构
example.jar |
|
|
| |
|
+-META-INF |
|
| +-MANIFEST.MF |
|
+-org |
|
| +-springframework |
|
| +-boot |
|
| +-loader |
|
| +- |
|
+-BOOT-INF |
|
+-classes |
|
| +-mycompany |
|
| +-project |
|
| +-YourClasses.class |
|
+-lib |
|
+-dependency1.jar |
|
+-dependency2.jar |
目录结构讲解
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#executablejar-jar-file-structure
3、war包方式启动
1)在pom.xml中将打包形式 jar 修改为war
构建项目名称
2)tocmat下载 https://tomcat.apache.org/download-90.cgi
3)修改启动类
public class XdclassApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(XdclassApplication.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(XdclassApplication.class, args);
}
}
4)打包项目,启动tomcat
4、启动容器介绍和第三方测试数据讲解
使用Jmter测试工具测试性能,QPS,TPS,RT
https://examples.javacodegeeks.com/enterprise-java/spring/tomcat-vs-jetty-vs-undertowcomparison-of-spring-boot-embedded-servlet-containers/
简介:讲解SpringBoot启动流程概述和基本加载案例
简介:讲解SpringBoot里面Filter讲解和使用Servlet3.0配置自定义Filter实战
filter简单理解:人--->检票员(filter)---> 景点
Ordered.HIGHEST_PRECEDENCE
Ordered.LOWEST_PRECEDENCE
低位值意味着更高的优先级 Higher values are interpreted as lower priority 自定义Filter,避免和默认的Filter优先级一样,不然会冲突
注册Filter的bean FilterRegistrationBean
同模块里面有相关默认Filter web->servlet->filter
4) @WebFilter 标记一个类为filter,被spring进行扫描 urlPatterns:拦截规则,支持正则
5)控制chain.doFilter的方法的调用,来实现是否通过放行 不放行,web应用resp.sendRedirect("/index.html");
场景:权限控制、用户登录(非前端后端分离场景)等
1、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-
SNAPSHOT/reference/htmlsingle/#boot-features-embedded-container-servlets-filters-listeners
讲解:使用 Servlet3.0的注解自定义原生Servlet和Listener 1、自定义原生Servlet
@WebServlet(name = "userServlet",urlPatterns = "/test/customs") public class UserServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().print("custom sevlet"); resp.getWriter().flush(); resp.getWriter().close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
简介:监听器介绍和Servlet3.0的注解自定义原生Listener监听器实战
1、自定义Listener(常用的监听器 servletContextListener、httpSessionListener、 servletRequestListener)
@WebListener
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
// TODO Auto-generated method stub
System.out.println("======requestDestroyed========");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("======requestInitialized========");
}
简介: 讲解拦截器使用,Spingboot2.x新版本配置拦截拦截器和旧版本SpringBoot配置拦截器区别讲解
继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本)
SpringBoot2.X 新版本配置拦截器 implements WebMvcConfigurer
postHandle:Controller之后调用,视图渲染之前,如果控制器Controller出现了异常,则不会执行此方法 afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理
拦截器不生效常见问题:
Filter
是基于函数回调 doFilter(),而Interceptor则是基于AOP思想
Filter在只在Servlet前后起作用,而Interceptor够深入到方法前后、异常抛出前后等
依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器所以可以运行在多种环境。
在接口调用的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
Filter和Interceptor的执行顺序
过滤前->拦截前->action执行->拦截后->过滤后
简介:介绍什么是SpringBoot Starter和主要作用
SNAPSHOT/reference/htmlsingle/#using-boot-starter
简介:介绍常用的SpringBoot2.x模板引擎和官方推荐案例
Java Server Pages 动态网页技术,由应用服务器中的JSP引擎来编译和执行,再将生成的整个页面返回给客户端
可以写java代码 持表达式语言(el、jstl) 内建函数
JSP->Servlet(占用JVM内存)permSize
javaweb官方推荐
springboot不推荐 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-
SNAPSHOT/reference/htmlsingle/#boot-features-jsp-limitations
FreeMarker Template Language(FTL) 文件一般保存为 xxx.ftl 严格依赖MVC模式,不依赖Servlet容器(不占用JVM内存)
内建函数
轻量级的模板引擎(负责逻辑业务的不推荐,解析DOM或者XML会占用多的内存) 可以直接在浏览器中打开且正确显示模板页面
直接是html结尾,直接编辑
xdlcass.net/user/userinfo.html
社会工程学
伪装
简介:SpringBoot2.x整合模板引擎freemarker实战
# 是否开启thymeleaf缓存,本地为false,生产建议为true spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.allow-request-override=false spring.freemarker.check-template-location=true
#类型
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=true spring.freemarker.expose-session-attributes=true
#文件后缀
spring.freemarker.suffix=.ftl
#路径
spring.freemarker.template-loader-path=classpath:/templates/
1)src/main/resources/templates/fm/user/
2)建立一个index.ftl
3)user文件夹下面建立一个user.html
讲解:SpringBoot2.x整合模板引擎thymeleaf实战
官网地址:https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html 1、thymeleaf相关maven依赖
2、thymeleaf基础配置
#开发时关闭缓存,不然没法看到实时页面 spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML5
#前缀
spring.thymeleaf.prefix=classpath:/templates/
#编码
spring.thymeleaf.encoding=UTF-8
#类型
spring.thymeleaf.content-type=text/html
#名称的后缀
spring.thymeleaf.suffix=.html
1)src/main/resources/templates/tl/ 2)建立一个index.html
快速入门:https://www.thymeleaf.org/doc/articles/standarddialect5minutes.html
简介:介绍近几年常用的访问数据库的方式和优缺点
Class.forName("com.mysql.jdbc.Driver")
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","root");
官网:https://commons.apache.org/proper/commons-dbutils/
互联网行业通常使用mybatis 不提供对象和关系模型的直接映射,半ORM
简介:SpringBoot2.x整合Mybatis3.x注解配置实战
1、使用starter, maven仓库地址:
http://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter 2、加入依赖(可以用 http://start.spring.io/ 下载)
#mybatis.type-aliases-package=net.xdclass.base_project.domain
#可以自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/movie? useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root spring.datasource.password =password
#如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource) spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
加载配置,注入到sqlSessionFactory等都是springBoot帮我们完成
@MapperScan("net.xdclass.base_project.mapper")
技巧:保存对象,获取数据库自增id
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
参考语法 http://www.mybatis.org/mybatis-3/zh/java-api.html
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL COMMENT '名称',
`phone` varchar(16) DEFAULT NULL COMMENT '用户手机号',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`age` int(4) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
相关资料:
http://www.mybatis.org/spring-boot-starter/mybatis-spring-bootautoconfigure/#Configuration
https://github.com/mybatis/spring-boot-starter/tree/master/mybatis-spring-boot-samples
整合问题集合:
https://my.oschina.net/hxflar1314520/blog/1800035 https://blog.csdn.net/tingxuetage/article/details/80179772
讲解:SpringBoot2.x整合Mybatis3.x增删改查实操, 控制台打印sql语句
#增加打印sql语句,一般用于本地开发测试
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
@Select("SELECT * FROM user")
@Results({
@Result(column = "create_time",property = "createTime") //javaType = java.util.Date.class
}) List
@Select("SELECT * FROM user WHERE id = #{id}")
@Results({
@Result(column = "create_time",property = "createTime")
})
User findById(Long id);
@Update("UPDATE user SET name=#{name} WHERE id =#{id}") void update(User user);
@Delete("DELETE FROM user WHERE id =#{userId}") void delete(Long userId);
3、增加API
@GetMapping("find_all") public Object findAll(){
return JsonData.buildSuccess(userMapper.getAll());
}
@GetMapping("find_by_Id") public Object findById(long id){ return JsonData.buildSuccess(userMapper.findById(id)); }
@GetMapping("del_by_id") public Object delById(long id){ userMapper.delete(id);
return JsonData.buildSuccess();
}
@GetMapping("update")
public Object update(String name,int id){
User user = new User(); user.setName(name); user.setId(id); userMapper.update(user);
return JsonData.buildSuccess();
}
简介:讲解什么是数据库事务,常见的隔离级别和传播行为
Serializable: 最严格,串行处理,消耗资源大
Repeatable Read:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据
Read Committed:大多数主流数据库的默认事务等级 Read Uncommitted:保证了读取过程中不会读取到非法数据。
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务,最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起, 两个事务之间没有关系,一个异常,一个提交,不会同时回滚
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常
简介:SpringBoot整合Mybatis之事务处理实战
1、service逻辑引入事务 @Transantional(propagation=Propagation.REQUIRED) 2、service代码
@Override
@Transactional
public int addAccount() {
User user = new User(); user.setAge(9);
user.setCreateTime(new Date()); user.setName("事务测试"); user.setPhone("000121212");
userMapper.insert(user);
int a = 1/0;
return user.getId();
}
简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具
简介:使用源码安装Redis4.x和配置外网访问
wget http://download.redis.io/releases/redis-4.0.9.tar.gz tar xzf redis-4.0.9.tar.gz cd redis-4.0.9 make
启动服务端:src/redis-server 启动客户端:src/redis-cli
1)打开redis.conf文件在NETWORK部分修改 注释掉bind 127.0.0.1可以使所有的ip访问redis 修改 protected-mode,值改为no
简介:使用springboot-starter整合reids实战
SNAPSHOT/reference/htmlsingle/#boot-features-redis
集群文档:https://docs.spring.io/spring-data/data-
redis/docs/current/reference/html/#cluster
#=========redis基础配置========= spring.redis.database=0 spring.redis.host=127.0.0.1
spring.redis.port=6390 # 连接超时时间 单位 ms(毫秒)
spring.redis.timeout=3000
#=========redis线程池设置=========
# 连接池中的最大空闲连接,默认值也是8。
spring.redis.pool.max-idle=200
#连接池中的最小空闲连接,默认值也是0。
spring.redis.pool.min-idle=200
# 如果赋值为-1,则表示不限制;pool已经分配了maxActive个jedis实例,则此时pool的状态为 exhausted(耗尽)。
spring.redis.pool.max-active=2000
# 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时
spring.redis.pool.max-wait=1000
4、常见redistemplate种类讲解和缓存实操(使用自动注入)
@Autowired
private StirngRedisTemplate strTplRedis
简介:高效开发方式 Redis工具类封装讲解和实战 1、常用客户端 https://redisdesktop.com/download 2、封装redis
工具类并操作
简介:讲解什么是定时任务和常见定时任务区别
配置更简单 xml或者注解
简介:SpringBoot常用定时任务表达式配置和在线生成器
1)crontab 工具 https://tool.lu/crontab/
简介:讲解什么是异步任务,和使用SpringBoot2.x开发异步任务实战
下单接口->查库存 100
余额校验 150 风控用户100
....
简介:日志介绍和新日志框架Logback讲解
1.常用处理java的日志组件 slf4j,log4j,logback,common-logging 等
logback当前分成三个模块:logback-core,logback-classic和logback-access; logback-core是其它两个模块的基础模块
Logger:日志记录器
Appender:指定日志输出的目的地,目的地可以是控制台,文件
Layout:日志布局 格式化日志信息的输出
===========log4j示例===========
### 设置###
log4j.rootLogger = debug,stdout,D,E
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志到=D://logs/error.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = D://logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出ERROR 级别以上的日志到=D://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =E://logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
5、Log4j日志转换为logback在线工具(支持log4j.properties转换为logback.xml,不支持 log4j.xml转换为 logback.xml) https://logback.qos.ch/translator/
简介:讲解SpringBoot2.x整合Logback配置实战
SNAPSHOT/reference/htmlsingle/#boot-features-logging
各个组件案例:https://logback.qos.ch/manual/index.html
注释:
简介:通过京东电商 介绍什么是搜索引擎,和开源搜索框架ElasticSearch6.x新特性介绍
前言:介绍ES的主要特点和使用场景,新特性讲解
mysql:like 模糊,性能问题,
solr:针对企业,Lucene elasticsearch:针对数据量特别大,PB,TB 纯java开发,springboot使用,5.6版本 es升级4->5版本,改动大,但是5版本后,改动不大
elasticSearch主要特点
搜索纠错,自动完成
新特性讲解
1、6.2.x版本基于Lucene 7.x,更快,性能进一步提升,对应的序列化组件,升级到Jackson 2.8 mysql:database table rocord es : index type(只能存在一个) document
在5.0到6.0版本中,每次有对应的API更新, 文档中也说明,推荐使用这种方式进行开发使用,所有可用节点间的负载均衡
在节点故障和特定响应代码的情况下进行故障转移,失败的连接处罚(失败的节点是否重试取决于失败的连续次数;失败的失败次数越多,客户端在再次尝试同一节点之前等待的时间越长)
官方文档:
1、6.0更新特性
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/release-notes-
6.0.0.html#breaking-java-6.0.0
2、6.1更新特性
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/release-notes-6.1.0.html
简介:讲解为什么不用ES6.x版本,及本地快速安装ElasticSeach和场景问题处理
配置JDK1.8 使用wget 下载elasticsearch安装包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.8.tar.gz
解压
tar -zxvf elasticsearch-5.6.8.tar.gz 官网:https://www.elastic.co/products/elasticsearch
外网访问配置:
config目录下面elasticsearch.yml 修改为 network.host: 0.0.0.0
配置es出现相关问题处理(阿里云、腾讯云,亚马逊云安装问题集合): 1、问题一
Java HotSpot(TM) 64-Bit Server VM warning: INFO:
os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as: # /usr/local/software/temp/elasticsearch-6.2.2/hs_err_pid1912.log
解决:内存不够,购买阿里云的机器可以动态增加内存
2、问题二
[root@iZwz95j86y235aroi85ht0Z bin]# ./elasticsearch
[2018-02-22T20:14:04,870][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler]
[] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~
[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~
[elasticsearch-6.2.2.jar:6.2.2]
at
org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~
[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~
[elasticsearch-cli-6.2.2.jar:6.2.2]
解决:用非root用户 添加用户:useradd -m 用户名 然后设置密码 passwd 用户名
3、问题三
./elasticsearch
Exception in thread "main" java.nio.file.AccessDeniedException:
/usr/local/software/temp/elasticsearch-6.2.2/config/jvm.options
解决:权限不够 chmod 777 -R 当前es目录
常见配置问题资料:https://www.jianshu.com/p/c5d6ec0f35e0
简介: ElasticSearch5.6.x简单测试 1、步骤 https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html
2、使用POSTMAN 工具
基础
查看集群状态:localhost:9200/_cat/health?v 查看索引列表:localhost:9200/_cat/indices?v
简介:SpringBoot2.x整合elasticSearch5.6.8实战
Spring Data Elasticsearch文档地址
https://docs.spring.io/spring-data/elasticsearch/docs/3.0.6.RELEASE/reference/html/
版本说明:SpringBoot整合elasticsearch
https://github.com/spring-projects/spring-data-elasticsearch/wiki/Spring-Data-
Elasticsearch---Spring-Boot---version-matrix
索引名称记得小写,类属性名称也要小写 新建实体对象article
加上类注解 @Document(indexName = "blog", type = "article")
ELASTICSEARCH (ElasticsearchProperties) spring.data.elasticsearch.cluster-name=elasticsearch # Elasticsearch cluster name.
spring.data.elasticsearch.cluster-nodes=localhost:9300 # Comma-separated list of cluster node addresses.
spring.data.elasticsearch.repositories.enabled=true # Whether to enable Elasticsearch repositories.
https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.3/query-dslqueries.html
//单个匹配,搜索name为jack的文档
QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "搜");
查看索引信息:http://localhost:9200/_cat/indices?v 查看某个索引库结构:http://localhost:9200/blog 查看某个对象:http://localhost:9200/blog/article/1
简介:讲解什么是小写队列,JMS的基础知识和使用场景
JMS提供者:Apache ActiveMQ、RabbitMQ、Kafka、Notify、MetaQ、RocketMQ
JMS生产者(Message Producer) JMS消费者(Message Consumer)
JMS消息
JMS队列
JMS主题
JMS消息通常有两种类型:点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)
MQ中需要用的一些类
ConnectionFactory :连接工厂,JMS 用它创建连接
Connection :JMS 客户端到JMS Provider 的连接
Session: 一个发送或接收消息的线程
Destination :消息的目的地;消息发送给谁.
MessageConsumer / MessageProducer: 消息接收者,消费者
简介:介绍ActiveMQ5.x消息队列基础特性和本地快速安装
特点:
...
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples 面板:
Name:队列名称。
Number Of Pending Messages:等待消费的消息个数。
Number Of Consumers:当前连接的消费者数目
Messages Enqueued:进入队列的消息总个数,包括出队列的和待消费的,这个数量只增不减。
Messages Dequeued:已经消费的消息数量。
简介:SpringBoot2.x整合ActiveMQ实战之点对点消息
SNAPSHOT/reference/htmlsingle/#boot-features-activemq
#整合jms测试,安装在别的机器,防火墙和端口号记得开放
spring.activemq.broker-url=tcp://127.0.0.1:61616
#集群配置
#spring.activemq.broker-url=failover:(tcp://localhost:61616,tcp://localhost:61617)
spring.activemq.user=admin
spring.activemq.password=admin
#下列配置要增加依赖
spring.activemq.pool.enabled=true spring.activemq.pool.max-connections=100
localhost:8080/api/v1/order?msg=12312321321312
@JmsListener(destination = "order.queue")
简介:SpringBoot整合ActiveMQ实战之发布订阅模式(pub/sub),及同时支持点对点和发布订阅模型
1、需要加入配置文件,支持发布订阅模型,默认只支持点对点
#default point to point
spring.jms.pub-sub-domain=true
注意点:
//需要给topic定义独立的JmsListenerContainer
@Bean
public JmsListenerContainerFactory> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setPubSubDomain(true);
bean.setConnectionFactory(activeMQConnectionFactory); return bean;
}
在配置文件里面,注释掉 #spring.jms.pub-sub-domain=true
简介:阿里开源消息队列 RocketMQ4.x介绍和新概念讲解
1)在高压下1毫秒内响应延迟超过99.6%。
2)适合金融类业务,高可用性跟踪和审计功能。
3)支持发布订阅模型,和点对点
4)支持拉pull和推push两种消息模式
5)单一队列百万消息
6)支持单master节点,多master节点,多master多slave节点
...
Producer:消息生产者
Producer Group:消息生产者组,发送同类消息的一个消息生产组
Consumer:消费者
Consumer Group:消费同个消息的多个实例
Tag:标签,子主题(二级分类),用于区分同一个主题下的不同业务的消息
Topic:主题
Message:消息
Broker:MQ程序,接收生产的消息,提供给消费者消费的程序
Name Server:给生产和消费者提供路由信息,提供轻量级的服务发现和路由
3、官网地址:http://rocketmq.apache.org/
学习资源:
1)http://jm.taobao.org/2017/01/12/rocketmq-quick-start-in-10-minutes/ 2)https://www.jianshu.com/p/453c6e7ff81c
简介:RocketMQ4.x本地快速部署
64bit OS, Linux/Unix/Mac
64bit JDK 1.8+;
路径:/Users/jack/Desktop/person/springboot/资料/第13章/第5课/rocketmq-all-4.2.0-binrelease/bin
结尾:The Name Server boot success. serializeType=JSON 表示启动成功
4)、关闭nameserver broker执行的命令 sh mqshutdown namesrv sh mqshutdown broker
简介:RoekerMQ4.x可视化控制台讲解
在阿里云,腾讯云或者虚拟机,记得检查端口号和防火墙是否启动
简介:Springboot2.x整合RocketMQ4.x实战,加入相关依赖,开发生产者代码
启动nameser和broker
# 消费者的组名
apache.rocketmq.consumer.PushConsumer=orderConsumer
# 生产者的组名
apache.rocketmq.producer.producerGroup=Producer
# NameServer地址
apache.rocketmq.namesrvAddr=127.0.0.1:9876
/**
*/
@Value("${apache.rocketmq.producer.producerGroup}") private String producerGroup;
/**
*/
@Value("${apache.rocketmq.namesrvAddr}") private String namesrvAddr;
private DefaultMQProducer producer ; public DefaultMQProducer getProducer(){
return this.producer;
}
@PostConstruct
public void defaultMQProducer() {
//生产者的组名 producer = new DefaultMQProducer(producerGroup); //指定NameServer地址,多个地址以 ; 隔开
//如
producer.setNamesrvAddr("192.168.100.141:9876;192.168.100.142:9876;192.168.100.149:9876"); producer.setNamesrvAddr(namesrvAddr); producer.setVipChannelEnabled(false);
try { /** * Producer对象在使用之前必须要调用start初始化,只能初始化一次
*/
producer.start();
} catch (Exception e) {
e.printStackTrace();
}
// producer.shutdown(); 一般在应用上下文,关闭的时候进行关闭,用上下文监听器 }
简介:Springboot2.x整合RocketMQ4.x实战,开发消费者代码,常见问题处理
1、创建消费者
问题:
解决:多网卡问题处理
1、设置producer: producer.setVipChannelEnabled(false); 2、编辑ROCKETMQ 配置文件:broker.conf(下列ip为自己的ip) namesrvAddr = 192.168.0.101:9876 brokerIP1 = 192.168.0.101
4、DESC: service not available now, maybe disk full, CL:
解决:修改启动脚本runbroker.sh,在里面增加一句话即可:
JAVA_OPT="${JAVA_OPT} -Drocketmq.broker.diskSpaceWarningLevelRatio=0.98"
(磁盘保护的百分比设置成98%,只有磁盘空间使用率达到98%时才拒绝接收producer消息)
常见问题处理:
https://blog.csdn.net/sqzhao/article/details/54834761 https://blog.csdn.net/mayifan0/article/details/67633729 https://blog.csdn.net/a906423355/article/details/78192828
简介:SpringBoot介绍多环境配置和使用场景
例如数据库配置,在开发的时候,我们一般用开发数据库,而在生产环境的时候,我们是用正式的数据
classpath根目录的“/config”包下 classpath的根目录下
简介: 讲解什么是reactive响应式编程和使用的好处
1、基础理解:
依赖于事件,事件驱动(Event-driven) 一系列事件称为“流” 异步 非阻塞
观察者模式
网上的一个例子: int b= 2;
int c=3 int a = b+c //命令式编程后续b和c变化,都不影响a b=5;
int b= 2; int c= 3
int a = b+c //响应式编程中,a的变化,会和b、c的变化而变化(事件驱动) b=5;
2、官网:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-
SNAPSHOT/reference/htmlsingle/#boot-features-webflux
SpingBoot2底层是用spring5,开始支持响应式编程,Spring又是基于Reactor试下响应式。
学习资料
简介:讲解SpringBoot2.x响应式编程介绍 Mono、Flux对象和优缺点
1、Spring WebFlux是Spring Framework 5.0中引入的新的反应式Web框架 1)简单业务而言:和其他普通(2、Flux和Mono User List
2)通俗理解:
Mono 表示的是包含 0 或者 1 个元素的异步序列
mono->单一对象 User redis->用户ID-》唯一的用户Mono
Flux 表示的是包含 0 到 N 个元素的异步序列
flux->数组列表对象 List
与Spring MVC不同,它不需要Servlet API,完全异步和非阻塞,并 通过Reactor项目实现Reactive Streams规范。
RxJava
3、Spring WebFlux有两种风格:基于功能和基于注解的。基于注解非常接近Spring MVC模型,如以下示例所示: 第一种:
@RestController @RequestMapping(“/ users”) public class MyRestController {
@GetMapping(“/ {user}”)
public Mono
// ...
}
@GetMapping(“/ {user} / customers”)
public Flux
// ...
}
@DeleteMapping(“/ {user}”)
public Mono
// ...
}
}
第二种: 路由配置与请求的实际处理分开
@Configuration
public class RoutingConfiguration {
@Bean
public RouterFunction
return route(GET( “/
{user}”).and(accept(APPLICATION_JSON)),userHandler :: getUser)
.andRoute(GET(“/ {user} /
customers”).and(accept(APPLICATION_JSON)),userHandler :: getUserCustomers)
.andRoute(DELETE(“/
{user}”).and(accept(APPLICATION_JSON)),userHandler :: deleteUser);
}
}
@Component
public class UserHandler {
公共 Mono
// ...
}
public Mono
}
公共 Mono
// ...
}
}
除了REST Web服务外,您还可以使用Spring WebFlux提供动态HTML内容。Spring WebFlux支持各种模板技术,包括Thymeleaf,FreeMarker
简介:webflux响应式编程实战
ServerResponse
测试
localhost:8080/api/v1/user/test
简介:讲解SpringBoot2.x WebFlux客户端WebClient的介绍和使用
1、反应式客户端
官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-
SNAPSHOT/reference/htmlsingle/#boot-features-webclient
简介:服务端常用推送技术介绍,如websocket,sse轮询等
全双工的,本质上是一个额外的tcp连接,建立和关闭时握手使用http协议,其他数据传输不使用http协议
更加复杂一些,适用于需要进行复杂双向数据通讯的场景
html5新标准,用来从服务端实时推送数据到浏览器端, 直接建立在当前http连接上,本质上是保持一个http长连接,轻量协议 简单的服务器数据推送的场景,使用服务器推送事件
学习资料:http://www.w3school.com.cn/html5/html_5_serversentevents.asp
简介:讲解SpringBoot2.x服务端主动推送Sever-Send-Events
简介:阿里云服务器介绍和使用讲解
简介:在阿里云服务器上安装JDK8和配置环境变量
lnux下使用wget下载jdk8:
进到目录/usr/local/software
配置环境变量
vim /etc/profile
加入
export JAVA_HOME=/usr/local/software/jdk8 export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH
使用 source /etc/profile 让配置立刻生效
简介:讲解SpringBoot生产环境部署和常见注意事项
winscp
securtyCRT mac: filezilla
访问路径 http://120.79.160.143:8080/api/v1/user/find
java -jar xxxx.jar
守护进程、系统服务、shell脚本
打包指定配置文件
访问不了
本地提交生产代码->gitlab仓库->Jenkins自动化构建->运维或者开发人员发布
简介:讲解SpringBoot使用actuator监控配置和使用
可用性:100%,99.9%
官方介绍:
Spring Boot包含许多附加功能,可帮助您在将应用程序投入生产时监视和管理应用程序。 可以选择使用HTTP端点或JMX来管理和监控您的应用程序,自动应用于审计,健康和指标收集;
一句话:springboot提供用于监控和管理生产环境的模块
官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-
SNAPSHOT/reference/htmlsingle/#production-ready
/actuator/health
/actuator/info /actuator
简介:SpringBoot2.x监控Actuator实战下集及生产环境建议,SpringBoot新旧版本区别
注意点: 网上的资料大多数没有讲到访问的前缀端点基础路径由 / 调整到 /actuator
如:/info调整为/actuator/info
/actuator/xxx
management.endpoints.web.exposure.include=*
SNAPSHOT/reference/htmlsingle/#boot-features-security-actuator
原因: 出于安全考虑,除/ health和/ info之外的所有执行器默认都是禁用的。
management.endpoints.web.exposure.include属性可用于启用执行器
在设置management.endpoints.web.exposure.include之前,请确保暴露的执行器不包含敏感信息和/
或通过将其放置在防火墙进行控制,不对外进行使用 禁用的端点将从应用程序上下文中完全删除。如果您只想更改端点所暴露的技术,请改用 include和exclude属性。
例子:
开启全部:management.endpoints.web.exposure.include=* 开启某个:management.endpoints.web.exposure.include=metrics 关闭某个:management.endpoints.web.exposure.exclude=metrics
或者用springadmin进行管理
相关资料:https://www.cnblogs.com/ityouknow/p/8440455.html
或者用自己编写脚本监控
CPU、内存、磁盘、nginx的http响应状态码200,404,5xx
3、介绍常用的几个
/health 查看应用健康指标
/actuator/metrics 查看应用基本指标列表
/actuator/metrics/{name} 通过上述列表,查看具体 查看具体指标
/actuator/env 显示来自Spring的 ConfigurableEnvironment的属性