分析最近投递的 30 家招聘技术要求中提及的相关技术的次数

提及次数排名

Mysql 19

SpringBoot 17

MyBatis 17

Redis 17

Spring 16

Srping Cloud 15

MongoDB 10

SpringMVC 9

Linux系统 9

Kafka 9

Dubbo 6

Docker 6

VUE 4

ES 4

kubernetes 4

RabbitMQ 4

zookeeper 4

TCP/IP 4

Node 3

oracle 3

Http 3

Netty 3

Angular 2

react 2

Nginx 2

Memcached 2

Flink 2

Spring 相关

Spring 16

Srping Cloud 15

Oracle 同义词

ORACLE 同义词的定义及使用

1
CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON;
  • 同义词就是别名,与视图类似,都是不占实际存储空间,相当于是访问数据库对象的另外一种方式。
  • 公用同义词和私用同义词

同义词的作用

  • 多用户协同开发,不再需要使用 user.tableA 而是直接使用同义词即可。
  • 简化 sql 语句

如何实现不同用户使用相同 SQL 查询

用户 encrypt

1
2
3
create synonym TEST_SYNONYM FOR AB01;

grant select on TEST_SYNONYM to encrypt_1;

用户 encrypt_1

RocketMQ

RocketMQ 初探

4个组件 producer,consumer,broker,nameserver

查看 RocketMQ 文档

https://rocketmq.apache.org/zh/docs/

功能特性

普通消息

定时/延时消息

ShardingSphere 中的分布式事务

以配置 XA 事务为例,查看整体流程

transaction rule 的初始化

1
2
3
4
5
6
7
8
9
public TransactionRule(final TransactionRuleConfiguration ruleConfig, final Map<String, ShardingSphereDatabase> databases) {
    configuration = ruleConfig;
    defaultType = TransactionType.valueOf(ruleConfig.getDefaultType().toUpperCase());
    providerType = ruleConfig.getProviderType();
    props = ruleConfig.getProps();
    // 创建 transactionManager 
    resource = new AtomicReference<>(createTransactionManagerEngine(databases));
    attributes = new RuleAttributes();
}

XA transactionManager 内部管理着 XA DataSource 也一并初始化(mysql 提供的 com.mysql.cj.jdbc.MysqlXADataSource)

Streaming result set com.mysql.cj.protocol.a.result.ResultsetRowsStreaming@3e72fd68 is still active.

背景

今天写一个并发查询的功能,但是报了如下的错误

java.sql.SQLException: Streaming result set com.mysql.cj.protocol.a.result.ResultsetRowsStreaming@3e72fd68 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.StatementImpl.executeSimpleNonQuery(StatementImpl.java:1241)
	at com.mysql.cj.jdbc.StatementImpl.setupStreamingTimeout(StatementImpl.java:632)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:947)
	at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)

探索

奇怪的是,虽然是并发,但是我都使用了独立的 hikari 连接,并且每次查询完都主动 close 了连接和 statments,当然这里要注意下,随时使用了全新的 hikari 连接,但是因为它有连接池,所以其它线程依然可以重复使用空闲的数据库连接。