mysql中重要超时处理机制

背景

应用中的一个事务性方法锁住了一条记录(select … for update), 并在锁住记录后陷入了死循环,由此导致其它事务对该条记录的任何操作都会处于等待中。此问题也可以理解为,一个事务加锁了某些记录,但是长时间不提交,导致大量事务等待超时。那这个超时时间是多少呢?如何控制这个超时时间呢?

java-Security-Illegal-key-size

背景

项目中使用了Java的加密库,使用的过程中出现异常Caused by: java.security.InvalidKeyException: Illegal key size or default parameters。 Google后发现需要替换对应的jar包。

解决办法

参考: https://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters

  1. 下载JDK对应版本的JCEhttp://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
  2. 解压下载文件,将JAVA_HOME的子目录jre/lib/security中的文件US_export_policy.jar, local_policy.jar替换为JCE下载的jar。

原因

Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。这种限制是因为美国对软件出口的控制。

扩展阅读

Java安全技术探索之路系列

mysql和事务

概念

数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:

  • 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
  • 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

mysql中的锁

autocommit, Commit, and Rollback

在innodb中,用户的每个操作内部都会对应一个事务,如果开启了autocommit模式,则每一个SQL语句都会在它自己的事务中执行,默认情况下,MySQL对每个新建立连接上的会话都开启了autocommit模式,因此如果每个SQL语句的执行没有返回错误,则MySQL自动会该SQL执行后执行commit操作。如果SQL执行失败,则MySQL会根据错误的类型来选择执行commit还是rollback。详情参考https://dev.mysql.com/doc/refman/5.7/en/innodb-error-handling.html

SpringBoot自动配置分析

前言

SpringBoot的使用无疑变得越来越广泛.好处是快速上手,但也带来了额外的复杂性. 了解SpringBoot自动配置的黑魔法对我们熟练使用,排查问题
是非常重要的,否在除了问题,你就会变得一头雾水,无处下手.下面以一个非常典型的SpringBoot应用来分析它的自动配置黑魔法.

应用入口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@EnableDiscoveryClient
@EnableCircuitBreaker
@SpringBootApplication
public class Application {

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

mysql批量修改列类型

背景

今天在开发一个功能时发现一个MySQL表的字段extra,类型是varchar(128),该字段是一个冗余字段,用来保存一些json格式的数据。该功能需要往该extra字段添加一个子字段,保存数据时报错了。当然了,是因为字段长度超过了定义的长度。如果是单个表,马上就可以修改该字段的长度,但我们的业务是分表的,手动修改工作量太大了,作为聪明的程序员肯定需要用程序员的思维来解决。

方案一

首先想到的方案是:写一段Python脚本,动态构建表名,执行alter table语句。还没开始前,想到这样的问题别人肯定遇到过,一定有其它的方案。Google了一下,发现了第二种方案。

|