
SpringBoot
in the way
这个作者很懒,什么都没留下…
展开
-
spring-data-jpa踩坑 - delete-then-save唯一索引冲突问题
https://my.oschina.net/u/1017843/blog/4799128https://juejin.cn/post/6925749855839387656原创 2021-10-16 22:54:39 · 1991 阅读 · 0 评论 -
sqlserver 整合spring报错 Software caused connection abort: recv failed
报错Software caused connection abort: recv failed有时sql可以执行成功,有时不行。 sql复制到Navicat中可以执行成功。解决方法: 替换jar包 <!--<dependency>--> <!--<groupId>com.microsoft.sqlserver</groupId>--> <!--<artifactId>sqljd原创 2021-06-18 11:30:22 · 858 阅读 · 0 评论 -
Springboot 多数据源事务,切换数据源+事务
项目有多个数据源, 根据配置文件配置的连接数来自动生成多数据源配置 并且使用 aop切换数据源,、使用的是 AbstractRoutingDataSource 重写 determineCurrentLookupKey 方法。在切换数据源之前 @Transactional 先执行 ,此时会去获取数据源,而此时数据源还没有切换 就会获取默认的数据源 。 这种情况会导致数据源切换失败源码:如果不用事务,切换数据源是可以的。2, 其它方式@Configuration@MapperScan(base原创 2021-06-03 17:40:37 · 1666 阅读 · 1 评论 -
SpringBoot初始化流程,tomcatStarter调用
1,SpringBoot初始化1, Springboot版本Springboot版本 2.1.7.RELEASE2, 文章主要解决的问题1,主要看一下 ServletContainerInitializer 和 ServletContextInitializer 在Springboot中的使用, ServletContextInitializer 是如何在初始化时被调用的。2, TomcatStart怎么将tomcat启动(ServletContainerInitailizer)与spring的原创 2020-11-29 10:39:34 · 1053 阅读 · 0 评论 -
lambda的特殊使用方式,springboot初始化中实例使用
public class Test { private Man testMan; { testMan = testRun(); } // lambad方式 public Man testRun(){ return this::selfRun; } // 匿名内部类方式 public Man testRun2(){return new Man(){ @Override publi原创 2020-11-27 10:05:24 · 605 阅读 · 0 评论 -
tomcat启动时调用 ServletContainerInitializer的onStartUp方法
public class StandardContext extends ContainerBase implements Context, NotificationEmitter { private Map<ServletContainerInitializer, Set<Class<?>>> initializers = new LinkedHashMap();//添加ServletContainerInitializer的实现类public void ad原创 2020-11-27 09:33:40 · 1323 阅读 · 0 评论 -
23,缓存使用
1,注意缓存雪崩问题 短时间内大量缓存失效的情况。这种情况一旦发生,可能就会在瞬间有大量的数据需要回源到数据库查询,对数据库造成极大的压力,极限情况下甚至导致后端数据库直接崩溃。这就是我们常说的缓存失效,也叫作缓存雪崩从广义上说,产生缓存雪崩的原因有两种:第一种是,缓存系统本身不可用,导致大量请求直接回源到数据库;第二种是,应用设计层面大量的Key在同一时间过期,导致大量的数据回源。第一种原因,主要涉及缓存系统本身高可用的配置,不属于缓存设计层面的问题,所以主要确保大量Key不在同一时间原创 2020-07-14 22:02:48 · 197 阅读 · 0 评论 -
22, 接口变迁的版本控制策略
以下处理都可以, 第一种和第三种实现方式好一点//通过URL Path实现版本控制@GetMapping("/v1/api/user")public int right1(){return 1;} //通过QueryString中的version参数实现版本控制@GetMapping(value = "/api/user", params = "version=2")public int right2(@RequestParam("version") int version) {retu原创 2020-07-12 20:40:32 · 307 阅读 · 0 评论 -
17, Spring controller单利, service多例 实现
在service上加上注解@Scope实现多例@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) controller在调用service时还是service仍然是单利Bean默认是单例的,所以单例的Controller注入的Service也是一次性创建的,即使Service本身标识了prototype的范围也没用解决方式:1, 让Service以代理方式注入。这样虽然Controller本身是单例的,但每次都能从代理获取Serv原创 2020-07-12 10:17:34 · 1270 阅读 · 0 评论 -
Nignx中配置History模式(vue)
前端在访问一个链接会调整到什么页面去。找不到路径就会调整到try_files设置的路径去 location /one { try_files $uri $uri/ /one/index.html; // one/index.html 是文件目录下的 }try_files 是指当用户请求url资源时 www.xxx.com/xxx,try_files 会到硬盘资源根目录里找 xxx(即配置中的第一个$uri)。如果存在名为 xxx 的文件就返回,如果找不到在找名为原创 2020-07-09 17:13:42 · 204 阅读 · 0 评论 -
java.lang.IllegalArgumentException: Invalid uri : Invalid query 问题解决
代码调用http发送请求报错:java.lang.IllegalArgumentException: Invalid uri : Invalid query问题: url中有特殊字符 如:@处理方式: 将特殊字符转码后再拼接到url中String param= "KKK"+ id + "@" + fff;String encode = URLEncoder.encode(param, "UTF-8"); //将特殊字符转码requestUrl = "http://xxx.com/xxxxx原创 2020-07-09 16:40:35 · 3198 阅读 · 0 评论 -
文件上传格式,后台接收处理
前端上传文件1. file格式 创建formData来完成file上传<input type="file" id="imgfile" name="pic" multiple><script> $("#imgfile").change(function () { var formData = new FormData(); $.each($('#imgfile')[0].files, function (i, file) {原创 2020-07-08 10:03:10 · 2347 阅读 · 0 评论 -
06_Spring 事物失效
1, 事务注解的方法要用pulbic声明, private声明会失效理由: CGLIB通过继承方式实现代理类,private方法在子类不可见,自然也就无法进行事务增强@Transactionalprivate void createUserPrivate(UserEntity entity) {}2, 不能调用同类里的事物方法. 必须通过调用事物增强的代理类 的目标方法才能生效。事务是基于动态代理实现的, 调用类里面的方法 self.createUserPublic() (调用的是Use原创 2020-07-04 12:01:09 · 3109 阅读 · 0 评论 -
第三方支付方案
第三方支付接口,调用支付接口a账户对b账户进行了转账操作,业务数据库也要做一个记账操作在数据库中,如何保证调用第三方支付接口和我本地的业务是一致性的呢?先创建支付订单,再提交外部,创建订单的操作独立事务,不要回滚(否则出异常了,订单都没了,补偿的依据都没有)只有外部接口告诉你明确成功或失败了,你才能认为操作成功或失败否则由定时任务调用外部查询接口查询交易结果,然后根据查到的结果补偿本地状态...原创 2020-07-04 10:39:49 · 357 阅读 · 0 评论 -
spring 事务中异步查询刚插入的数据
事务中先插入数据,再根据id查询, 可以查询到数据事务中先插入数据, 异步去查询, 如果事务没提交, 则查询不到刚插入的数据。 @Override @Transactional public void test() { dao.insert(user); new Thread(() ->{ test2(user.getId());}).start(); try { Thread.sleep(3000);原创 2020-06-24 10:02:15 · 3326 阅读 · 0 评论 -
Spring 全局异常捕获,不会处理异步抛出的异常
异步方法中的异常不会被全局异常处理。抛出的异常如果被代码内的 try/catch 捕获了,就不会被 ExceptionHandler 处理了原创 2020-05-22 18:58:35 · 696 阅读 · 0 评论 -
Java 简单的重试机制
模板方式public abstract class RetryTemplate { private static final int DEFAULT_RETRY_TIME = 1; private int retryTime = DEFAULT_RETRY_TIME; // 重试的睡眠时间 private int sleepTime = 0; public int getSleepTime() { return sleepTime;原创 2020-05-09 19:03:13 · 481 阅读 · 0 评论 -
Java Stream分组取最大值合并list, 排序倒叙
根据属性A分组,然后取分组里属性B最大的值, 最后合并成list Map<String, IWLS_EnDepotEntry> collect = endepot.stream().collect( Collectors.groupingBy(IWLS_EnDepotEntry::getPurBCode, ...原创 2020-04-14 09:04:55 · 4593 阅读 · 0 评论 -
计算两个坐标间的距离
计算经纬度间的距离public class DistanceUtils { private static double EARTH_RADIUS = 6378137; // public static double getDistance(String lat1Str, String lng1Str, String lat2Str, String lng2Str) {...原创 2020-04-13 10:03:31 · 799 阅读 · 0 评论 -
Java将列表直接分页
import com.baomidou.mybatisplus.core.metadata.IPage;public class PageUtils implements Serializable { private static final long serialVersionUID = 1L; /** * 总记录数 */ private int totalCount; /**...原创 2020-04-13 10:00:34 · 343 阅读 · 0 评论 -
解决验证码乱码
问题:在测试环境正常,但是发到线上服务器就乱码经过检查发现是代码中设置的字体服务器中没有对应字体 Graphics2D g2 = image.createGraphics();[图片]在服务器加上 Algerian字体(字体从windows中复制到服务器),重启服务就好了。...原创 2020-03-06 10:39:41 · 2419 阅读 · 0 评论 -
mybatis 逻辑分页和物理分页
Mybatis实现分页的方法使用RowBounds对象进行逻辑(逻辑内存中)分页,它是针对ResultSet结果集执行的内存分页。使用pageHelper插件进行物理分页(其实是依赖物理数据库实体)。2. Mybatis使用pageHelper实现分页的原理强烈推荐阅读——浅析pagehelper分页原理<dependency> <groupId>c...原创 2020-02-29 20:47:52 · 1351 阅读 · 0 评论 -
springboot 多数据源
单数据源1, springboot集成mybatis 我们一般使用druid连接池。 druid中实现了 DataSource多数据源实现aop的方案: AOP结合AbstractRoutingDataSource1, 在执行的service上使用自定义注解,注解标明使用的那个数据库。2, 在执行sql之前, 通过aop在在threadLocal中保存数据源。3, 继承的MyDy...原创 2020-02-24 19:35:02 · 199 阅读 · 0 评论 -
SpringBoot 整合redis
1, 在使用redis连接池的时候SpringBoot1.0默认采用jedis客户端SpringBoot2.0默认采用Lettuce客户端来连接Redis服务端的默认是不使用连接池的,只有配置 redis.lettuce.pool下的属性的时候才可以使用到redis连接池.要使用lettuce连接池 需要引入 <dependency> ...原创 2020-02-23 14:17:00 · 187 阅读 · 0 评论 -
hibernate-validator分组校验
根据groups来指定需要校验的字段class Person{ @NotNull(message = "id不能为空!",groups = {Update.class}) Integer id; @NotBlank(message = "姓名不能为空",groups = {Add.class,Update.class}) String name; public interf...原创 2020-01-03 09:18:27 · 1734 阅读 · 3 评论 -
Spring按类型自动装配注入数组、集合、Map
1, 如果是数组,则获取数组元素类型,查找匹配该类型的所有bean,返回一个这些bean的数组;2, 如果该类可赋给Collection,并且是一个接口,则获取集合元素类型,查找匹配该类型的所有bean,返回一个这些bean的集合;3, 如果该类型是Map(注意是type == Map.class),且key是String类型,则获取Map的value的类型,查找匹配该类型的所有b...原创 2019-12-04 18:12:58 · 804 阅读 · 0 评论