Spring Boot
ypp91zr
善于分享,提升自我!
展开
-
application.yml使用maven配置报错:while scanning for the next token found character ‘@‘ that cannot start a
在yml配置文件使用maven的配置引用报错:ERROR org.springframework.boot.SpringApplication - Application run failedorg.yaml.snakeyaml.scanner.ScannerException: while scanning for the next tokenfound character '@' that cannot start any token. (Do not use @ for indentation)原创 2021-10-21 16:13:03 · 5642 阅读 · 0 评论 -
Spring统一全局请求后置处理器
废话就不多说了,看代码package org.com.rsmall.wx.config.advice;import org.apache.commons.lang3.StringUtils;import org.com.rsmall.db.dao.member.MemberCompanyBindInfoDao;import org.com.rsmall.db.dao.member.MemberDao;import org.com.rsmall.db.entity.member.Member;原创 2021-01-04 17:08:23 · 454 阅读 · 2 评论 -
redis分布式锁(redisson)的简单封装
项目用到了redisson分布式锁,但是每个地方的代码除了业务代码,其他都差不多一样的,如果要修改的话,就要修改很多,不只修改一个项目,其他项目也得该,地方多了容易出错,并且数据也对不上。起始的想法是封装起来,然后自定义一个spring boot starter。其他项目依赖即可,这样一来如果要修改只改这个starter模块就可以了。于是将项目分布式锁进行了简单封装,以前是下面代码这样的@Autowiredprivate RedissonClient redissonClient;public原创 2020-09-03 15:34:23 · 1507 阅读 · 0 评论 -
工具类使用@Autowired 注入静态Bean
@Componentpublic class AutowireStaticSmartInitializingSingleton implements SmartInitializingSingleton { @Autowired private AutowireCapableBeanFactory beanFactory; /** * 当所有的单例 Bena 初始化完成后,对 static 静态成员进行赋值 */ @Override pub.原创 2020-07-28 17:52:10 · 1035 阅读 · 0 评论 -
JAVA easypoi合并单元格
公司用到了easypoi导出,发现网上关于easypoi合并的例子真的很少,没找到,于是自己研究了下,项目是Spring Bootpom.xml<!--easypoi --> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.1</version&原创 2020-07-14 16:14:36 · 20134 阅读 · 12 评论 -
Spring Boot Starter自动装配原理
先看看SpringBoot自动装配的原理,看了源码原理后就明白为什么可以自定义Starter了@SpringBootApplication是必须的,在Application启动类上的一个注解,大家都知道,就从@SpringBootApplication入手,点击进去是很多注解的组合,每个注解就不多做解释了重点看@EnableAutoConfiguration,它是自动装配的整个逻辑,再点击去,关键信息@Import(AutoConfigurationImportSelector.class)原创 2020-07-07 17:52:26 · 1722 阅读 · 1 评论 -
Malformed POM D:\java\ideaProjects\spark\pom.xml: expected START_TAG or END_TAG not TEXT (position:
Malformed POM D:\java\ideaProjects\spark\pom.xml: expected START_TAG or END_TAG not TEXT (position: TEXT seen ...<!--\u6307\u5b9aresources\u63d2\u4ef6\u5904\u7406\u54ea\u4e2a\u76ee\u5f55\u4e0b\u7684\u8d44\u6e90\u6587\u4ef6-->\r\n <d...原创 2020-06-18 11:17:27 · 1746 阅读 · 0 评论 -
application.properties/Environment 中文乱码
先是在pom.xml文件配置了属性,然后在application.properties中引用,其他地方通过Spring从application.properties中拿就可以了,结果不尽人意,不除意外有中文肯定会有编码问题,这个和开发工具idea什么的编码UTF-8无关pom.xmlapplication.properties如果在代码直接获取就会出现下面这种情况需要编码处理,Spring应该就是通过ISO8859-1获取的。下面是解决办法(如果是application.ym原创 2020-05-19 15:33:47 · 1350 阅读 · 1 评论 -
SpringBoot+Redis+Lua分布式限流
Redis支持LUA脚本的主要优势LUA脚本的融合将使Redis数据库产生更多的使用场景,迸发更多新的优势:高效性:减少网络开销及时延,多次redis服务器网络请求的操作,使用LUA脚本可以用一个请求完成 数据可靠性:Redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。 复用性:LUA脚本执行后会永久存储在Redis服务器端,其他客户端可以直接复用 可嵌入性:可嵌入JAV...原创 2020-05-07 17:24:34 · 1027 阅读 · 2 评论 -
Could not commit JPA transaction; nested exception is javax.persistence.RollbackException
新公司用的JPA,以前没用过。在批量添加的时候遇到一个错:Could not commit JPA transaction; nested exception is javax.persistence.RollbackException多数情况是在提交数据之前事务已经抛出了RollbackException,或者是没有使用@Transactional事务,我是前者teacher...原创 2020-04-30 18:04:36 · 25161 阅读 · 2 评论 -
redis监听key过期事件,详细步骤
1、配置redis.conf文件配置文件默认是#注释了的,改为notify-keyspace-events Ex 重启redis,记住指定redis.conf配置文件启动2、配置一个key过期事件的监听器package com.shinedata.config.redis;import org.apache.commons.lang3.StringUtils;impor...原创 2020-04-20 15:21:29 · 18736 阅读 · 10 评论 -
TransactionSynchronizationManager绑定一个事务并且在事务之后提交操作
最开始需求,在修改之后提交一个异步请求,通知另外一个程序服务做后续逻辑处理,最开始的处理方式@Transactional public void createActivity(){ createActivity();//新增操作 updateOrder();//修改操作 activityOrderAsyncService.activityOrderPayCallBack(act...原创 2020-03-27 17:00:00 · 1694 阅读 · 0 评论 -
通过Spring获取所有类上贴了注解的实例以及Class.getAnnotation()获取注解为null的解决办法
先贴代码:Map<String, Object> wechatSendTemplateServiceBeanMap = springBeanTool.getBeanByAnnotation(WechatSendTemplate.class); for (Map.Entry<String, Object> beanMap ...原创 2019-12-27 14:20:32 · 5708 阅读 · 0 评论 -
类以及方法使用@Transactional注解事务后获取类实例
今天在做项目时,由于类型很多,就改成了类似策略模式的,不使用if else,方便后期扩展把所有的实现类继承同一接口,再一个不相干的类进行构造所有实现类@Servicepublic class SendTemplateService { Map<String, WechatSendTemplateService> wechatSendTemplateServiceM...原创 2019-12-19 17:46:18 · 815 阅读 · 0 评论 -
spring boot mybatis 扫描多个mapper文件夹里面的mapper.xml
上图,文件夹目录结构最开始没有finance这个文件夹,想把财务和其他业务模块分开,所以新建文件夹了死活解析不到xml文件。后面发现路径没有改。最开始是:classpath:mapper/*Mapper.xml改成以下图蓝色的路径就可以了,扫描mapper文件夹下所有mapper.xml文件...原创 2018-10-29 15:57:00 · 12826 阅读 · 7 评论 -
基于Redis的分布式锁实现
线程锁:大家都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时,同一时间只有一个线程在执行,其余线程必须要等待当前线程执行完之后才能执行该代码段。但是,其余线程是可以访问该对象中的非加锁代码块的。 进程锁:也是为了控制同一操作系统中多个进程访问一个共享资源,只是因为程...原创 2019-05-04 20:08:59 · 735 阅读 · 0 评论 -
Spring Cloud Zuul限流
在高并发场景下,往往离不开限流,有基于服务限流、全局限流等,常见的限流算法有漏桶算法和令牌通算法(前一篇文章有讲解)利用google的Guava框架进行限流,采用的是令牌桶算法,是对java的拓展类库。里面有换一个RateLimiter类RateLimiterFilter继承ZuulFilter,前置过滤器package com.chwl.cn.filter;import jav...原创 2019-05-19 18:06:54 · 276 阅读 · 0 评论 -
手写Spring事务
<!-- 配置事物 --> <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="...原创 2019-05-21 00:15:09 · 469 阅读 · 0 评论 -
Description: The bean 'proxyRequestHelper', defined in class path resource [org/springframework/clo
配置zuul网关,启动springboot报错Description:The bean 'proxyRequestHelper', defined in class path resource [org/springframework/cloud/netflix/zuul/ZuulProxyAutoConfiguration$NoActuatorConfiguration.class],...原创 2019-05-16 00:01:35 · 634 阅读 · 0 评论 -
Spring Cloud Zuul ZuulProperties
zuul有默认的配置:ZuulProperties源码: * Copyright 2013-2017 the original author or authors.package org.springframework.cloud.netflix.zuul.filters;import com.netflix.hystrix.HystrixCommandProperties.Ex...原创 2019-05-16 00:13:58 · 2512 阅读 · 0 评论 -
Spring Cloud Zuul网关搭建详解
网关的英文名称:gateway,又叫做网间连接器、协议转换器。网关是在采用不同体系结构或协议的网络之间进行互通时,用于提供协议转换、路由选择、数据交换、日志埋点、负载均衡、容灾、鉴权、限流等网络兼容功能的设施。后台服务肯定不能暴露在外,而且都是内网,这里的网关就至关重要,为了防止单点故障,实现高可用。可以搭建多节点springboot2.1.1 springcloud Finchley...原创 2019-05-16 00:16:36 · 1521 阅读 · 0 评论 -
Spring Cloud eureka开启权限验证登录
spring boot版本2.0.3pom依赖:<!-- 开启密码访问 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId>...原创 2019-05-11 21:41:42 · 5255 阅读 · 0 评论 -
Spring Boot Zuul的鉴权
做一个简单的鉴权token鉴权,验证token一般在zuul网关层面进行验证鉴权等操作,除了鉴权,还可以限流、加密等。继承ZuulFilter,ZuulFilter源码: 实现于IZuulFilter * Copyright 2013 Netflix, Inc.package com.netflix.zuul;import com.netflix.config.Dyn...原创 2019-05-17 01:56:09 · 4948 阅读 · 0 评论 -
分布式事务之rabbitMQ最终一致性
一般的大型电商网站都会面临的问题:分布式事务,在面临分布式微服务等项目使用传统的单一事务已经无法满足,解决分布式事务的方案也比较多,有TCC事务补偿(基于2PC的实现)、2PC(两阶段提交)、3PC(三阶段提交)等,框架有JTA atomiks等。很多公司也有自己的分布式事务解决方案,比如最开始支付宝的XTS等像JTA atomiks等2PC的方案效率并不高,中间需要一个协调者,并且是同步的,...原创 2019-05-26 22:56:56 · 12387 阅读 · 6 评论 -
Spring Boot、Spring Session、redis实现分布式session共享
Spring Boot版本2.1.1 Spring Cloud版本Greenwich.RELEASE Redis3.2.100一主二从哨兵模式Spring Session深入详细原理不再本文范畴之内项目结构采用的maven子父级pom.xml:<dependency> <groupId>org.springframework.boot<...原创 2019-05-28 23:43:26 · 925 阅读 · 0 评论 -
spring boot+redis实现token机制
token的意思,即"令牌",有这个令牌就可以进行访问,就具有一定的权限,在传统的应用中,一般是存储于session,但在当下很多分布式微服务的应用中,session就显得力不从心了。当用户第一次登陆之后,服务端生成一个token并返回给客户端,客户端每次以后带着这个token访问即可,无需用户名和密码。token可以防止表单重复提交和身份验证等用途流程: 1、用户...原创 2019-05-03 16:46:03 · 6200 阅读 · 3 评论 -
Spring Boot 返回json数据乱码
第一种解决方式:在请求RequestMapping直接设置,只针对请求,在拦截器返回json数据时有可能乱码@RequestMapping(value ="/user", produces="application/json;charset=UTF-8")第二种方式:不一定有效#解决@ResponseBody中文乱码问题spring: http: encoding...原创 2019-05-03 14:28:19 · 4007 阅读 · 0 评论 -
spring 在@ResponseBody返回json数据前进行全局处理
第一种:@ControllerAdvice controller增强处理实现ResponseBodyAdvice<Object>,重写方法beforeBodyWritepackage com.pinyu.miniprogram.global.exception;import org.apache.logging.log4j.LogManager;import org...原创 2019-05-03 14:01:57 · 1744 阅读 · 0 评论 -
servlet注入spring service
平时一般用spring都是使用controller,但有时候会使用到servlet。场景:最近在接入中国银联代收产品支付,不得不说银联的技术人员牛X,为了大家方便统一接入,使用的是servlet废话不多说,代码:package com.pinyu.system.web.servlet.unionpay;import java.io.IOException;import java...原创 2018-11-14 14:42:43 · 1787 阅读 · 0 评论 -
spring boot+mybatis+druid 多数据源多库分布式事务
废话不多说,首先贴配置文件,需要引入pomxml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</versi...原创 2018-11-12 11:23:19 · 1713 阅读 · 0 评论 -
spring boot+mybatis+druid 多数据源配置
application.yml(application.properties)配置:spring: datasource: druid: type: com.alibaba.druid.pool.xa.DruidXADataSource driver-class-name: com.mysql.jdbc.Driver ...原创 2018-11-12 11:12:08 · 532 阅读 · 0 评论 -
Spring boot 使用servlet
废话就不说了,看代码:启动类@ComponentScan(basePackages = "com.pinyu.system")@EnableTransactionManagement(proxyTargetClass = true)//@SpringBootApplication(exclude={ // DataSourceAutoConfiguration.class, /...原创 2018-11-13 17:05:23 · 192 阅读 · 0 评论 -
spring boot log4j2 自定义级别日志并存储,超详细
由于需要一些业务日志,本来是用的注解,然后用spring aop获取注解的形式来记录,但是由于最开始的时候没有统一controller 方法的参数,参数数据,细致到id不太好记录。于是想到了log4j的形式存储数据库,但log4j的形式记录会记录所有级别的日志,即使指定日志级别,其他框架里面的同级别日志也会记录,很混乱。于是想到了自定义级别来记录存储,这样就解决了其他框架同级别的日志不会同时存储,...原创 2018-11-02 11:47:57 · 7634 阅读 · 2 评论 -
log4j2 记录信息到数据库
定义了一个切面 Spring Aop的添加了注解的设置userId等自定义注解:package com.pinyu.system.global.ann;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retentio...原创 2018-11-01 17:22:55 · 1012 阅读 · 0 评论 -
spring boot 获取applicationContext servletContext
今天在做一个quartz定时任务的时候,要获取servletContext。想的是获取到request也可以,但这个定时任务不会发起请求,是定时从数据库查数据,所以request不符合场景。然后就想到了servletContext。但是在过程中用了很多种方式都获取不到。因为是在普通类,没有controller这种request。网上的其他方式配置:1.servletContext serv...原创 2018-10-17 14:12:50 · 12022 阅读 · 4 评论 -
spring 全局异常处理及自定义异常场景
废话不多说,先贴代码:package com.pinyu.system.exception;import java.util.HashMap;import java.util.Map;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import org.sprin...原创 2018-10-15 16:35:40 · 620 阅读 · 0 评论 -
spring boot 配置log4j2
spring boot 1.4以上不支持log4j 可以使用log4j2 pom.xml 引入log4j2 先排除spring boot默认的logback日志<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot...原创 2018-10-15 16:31:22 · 1032 阅读 · 0 评论 -
spring boot 集成quartz 定时任务调度
添加依赖:<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> <exclusions>原创 2018-10-18 10:57:37 · 274 阅读 · 0 评论 -
Interceptor 拦截器请求302
今天在测试其他人写的权限的时候,发送了一个请求,但是请求里面的路径变了,错了开始访问/pinyu/houseResource/ 然后进入Interceptor里面request里面的请求变了,看下图开始百思不得其解为什么地址莫名其妙就变了,然而其他的路径正常。于是我把按钮菜单等权限注释掉。然后变成了404,没有找到页面。突然想起了我没有写controller,更没有这个请求的cont...原创 2018-09-28 16:13:50 · 3039 阅读 · 0 评论 -
Spring boot 整合mybatis 使用阿里巴巴druid配置
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver driver-class-name: com.mysql.jdbc.Driver platform: mysql ...原创 2018-09-15 14:00:46 · 415 阅读 · 0 评论