09 2022 档案
摘要:instantiateBean protected BeanWrapper instantiateBean(String beanName, RootBeanDefinition mbd) { try { Object beanInstance; if (System.getSecurityMana
阅读全文
摘要:autowireConstructor: protected BeanWrapper autowireConstructor( String beanName, RootBeanDefinition mbd, @Nullable Constructor<?>[] ctors, @Nullable O
阅读全文
摘要:createBeanInstance protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { // Make sure bean clas
阅读全文
摘要:一、例子 User.java public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void set
阅读全文
摘要:一、例子 Supplier.java @FunctionalInterface public interface Supplier<T> { /** * Gets a result. * * @return a result */ T get(); } java8以后提供的接口,可以看作是生产者,返
阅读全文
摘要:doCreateBean protected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException { // Instant
阅读全文
摘要:InstantiationAwareBeanPostProcessor继承了BeanPostProcessor接口,扩展了BeanPostProcessor的功能。 public interface BeanPostProcessor { /** 调用init方法的前置处理 */ @Nullable
阅读全文
摘要:lookup-method和replaced-method平时用的很少,主要用来解决单例bean中使用原型bean的场景。 一、应用 lookup-method: A.java public class A { public B getB() { return null; } public void
阅读全文
摘要:protected <T> T doGetBean( String name, @Nullable Class<T> requiredType, @Nullable Object[] args, boolean typeCheckOnly) throws BeansException { Strin
阅读全文
摘要:一、DefaultListableBeanFactory的preInstantiateSingletons方法 @Override public void preInstantiateSingletons() throws BeansException { if (logger.isTraceEna
阅读全文
摘要:从rocketmq-docker项目构建rocketmq的镜像,rocketmq-docker的地址是https://github.com/apache/rocketmq-docker/,克隆项目: git clone https://github.com/apache/rocketmq-docke
阅读全文
摘要:一、设置docker repository sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 二、安装Doc
阅读全文
摘要:protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // Initialize conversion service for this context. if (b
阅读全文
摘要:at 命令允许指定Linux系统何时运行脚本。at命令会将作业提交到队列中,指定shell何时运行该作业。at 的守护进程atd会以后台模式运行,检查作业队列来运行作业。大多数Linux发行版会在 启动时运行此守护进程。 atd 守护进程会检查系统上的一个特殊目录(通 常位于/var/spool/a
阅读全文
摘要:每个进程都有优先级,优先级决定了进程运行的先后顺序及时间片的长短。进程的默认优先级是0,最高优先级是-20,最低优先级是19。 可以使用nice改变进程启动时的优先级。 不能用非管理员权限提高进程优先级。 可使用renice改变运行中进程的优先级。 #!/bin/bash sleep 300
阅读全文
摘要:一、信号 shell会将信号传给shell脚本程序来处理。而shell脚本的默认行为是忽略这些信号。它们可能会不利于脚本的运行。要避免这种情况,你可以脚本中加入识别信号的代码,并执行命令来处理信号。 Ctrl+C组合键会生成SIGINT信号(中断进程),并将其发送给当前在shell中运行的所有进程。
阅读全文
摘要:将csv文件导入mysql数据库中。 创建数据库demo: create database demo; 使用数据库demo: use demo; 创建表user: create table user( id int primary key auto_increment, name varchar(2
阅读全文
摘要:mysql文档地址是https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html。 首先从https://dev.mysql.com/downloads/repo/yum/下载yum文件: 用命令下载: wget h
阅读全文
摘要:一、文件描述符 Linux系统将每个对象当作文件处理。这包括输入和输出进程。Linux用文件描述符(file descriptor )来标识每个文件对象。文件描述符是一个非负整数,可以唯一标识会话中打开的文件。每个进程一次最多可以有九个文件描述符。 出于特殊目的,bash shell保留了前三个文件
阅读全文
摘要:bash shell提供了一些不同的方法来从用户处获得数据,包括命令行参数(添加在命令后的数据)、命令行选项(可修改命令行为的单个字母)以及直接从键盘读取输入的能力。 一、命令行参数 向shell脚本传递数据的最基本方法是使用命令行参数。bash shell会将一些称为位置参数(positional
阅读全文
摘要:一、while循环 while命令某种意义上是if-then语句和for循环的混杂体。while命令允许定义一个要测试的命令,然后循环执行一组命令,只要定义的测试命令返回的是退出状态码0。它会在每次迭代的一开始测试test命令。在test命令返回非零退出状态码时,while命令会停止执行那组命令。
阅读全文
摘要:bash shell提供了for命令,允许你创建一个遍历一系列值的循环。每次迭代都使用其中一个值来执行已定义好的一组命令。 格式: for var in list do commands done 例子: #!/bin/bash for test in 北京 上海 深圳 成都 武汉 郑州 do ec
阅读全文
摘要:Spring的事件发布是使用观察者模式实现的。先看下观察者模式。 观察者(Observer)模式中包含两种对象,分别是目标对象和观察者对象。在目标对象(被观察者)和观察者对象间存在着一种一对多的对应关系,当这个目标对象的状态发生变化时,所有依赖于它的观察者对象都会得到通知并执行它们各自特有的行为。
阅读全文
摘要:AbstractApplicationContext.java refresh方法 registerBeanPostProcessors(beanFactory); protected void registerBeanPostProcessors(ConfigurableListableBeanF
阅读全文
摘要:加载完BeanDifinition后,可以对BeanDifinition做某些操作,比如修改BeanDifinition以及新增BeanDifinition。Spring提供了BeanFactoryPostProcessor接口对BeanDifinition进行扩展。 AbstractApplica
阅读全文
摘要:AbstractApplicationContext类refresh方法调用obtainFreshBeanFactory加载BeanDifinition到BeanFactory中,接下来执行beanFactory的准备工作为下面的执行作铺垫。 prepareBeanFactory方法为beanFac
阅读全文
摘要:bash shell提供了两项可在if-then语句中使用的高级特性: 用于数学表达式的双括号 用于高级字符串处理功能的双方括号 一、使用双括号 双括号命令允许你在比较过程中使用高级数学表达式。双括号命令的格式如下: (( expression )) 例子: #!/bin/bash var=10 i
阅读全文
摘要:一、检查目录 -d检查是否存在且是目录。 #!/bin/bash jump_directory=/home/arthur if [ -d $jump_directory ]; then echo "The $jump_directory directory exists." cd $jump_dir
阅读全文
摘要:一、操作 inet << inet → boolean 子网是否严格包含在子网中?此运算符和接下来的四个运算符测试子网包含。他们只考虑两个地址的网络部分(忽略网络掩码右侧的任何位)并确定一个网络是否与另一个网络相同或属于另一个网络。 例子: select inet '192.168.1.5' <<
阅读全文
摘要:一、数据类型格式化函数 在 to_char 输出模板字符串中,某些模式被识别并替换为基于给定值的适当格式的数据。任何不是模板模式的文本都被简单地逐字复制。类似地,在输入模板字符串(对于其他函数)中,模板模式标识要由输入数据字符串提供的值。如果模板字符串中存在非模板模式的字符,则直接跳过输入数据字符串
阅读全文
摘要:一、Bit String 函数和操作 此外,可以将整数值转换为位类型或从位类型转换为整数值。将整数转换为 bit(n) 会复制最右边的 n 位。将整数转换为比整数本身更宽的位串宽度将在左侧进行符号扩展。一些例子: select 44::bit(10); select 44::bit(3); sele
阅读全文
摘要:一、逻辑运算符 常用的逻辑运算符可用: boolean AND boolean → boolean boolean OR boolean → boolean NOT boolean → boolean SQL 使用了真、假、空的三值逻辑系统,null代表“未知”。观察以下真值表: 运算符 AND 和
阅读全文
摘要:一、range类型 范围类型是表示某个元素类型(称为范围的子类型)的一系列值的数据类型。例如,时间戳的范围可用于表示会议室预定的时间范围。在这种情况下,数据类型是 tsrange(“timestamp range”的缩写),timestamp 是子类型。子类型必须具有总顺序,以便明确定义元素值是在值
阅读全文
摘要:一、数组类型 PostgreSQL 允许将表的列定义为可变长度的多维数组。可以创建任何内置或用户定义的基本类型、枚举类型、复合类型、范围类型或域的数组。 为了说明数组类型的使用,我们创建了这个表: CREATE TABLE sal_emp ( name text, pay_by_quarter in
阅读全文
摘要:一、Enumerated 类型 枚举(enum)类型是包含一组静态、有序值的数据类型。它们等效于许多编程语言中支持的枚举类型。枚举类型的一个示例可能是星期几,或者是一组数据的状态值。 枚举类型是使用 CREATE TYPE 命令创建的,例如: CREATE TYPE mood AS ENUM ('s
阅读全文
摘要:一、数字类型 整数类型: SQL 仅指定整数类型 integer(或 int)、smallint 和 bigint。类型名称 int2、int4 和 int8 是扩展,其他一些 SQL 数据库系统也使用它们。 数值类型 numeric 类型可以存储具有非常多位数的数字。特别推荐用于存储货币数量和其他
阅读全文
摘要:检索过程或从数据库中检索数据的命令称为查询。在 SQL 中,SELECT 命令用于指定查询。SELECT 命令的一般语法是: [WITH with_queries] SELECT select_list FROM table_expression [sort_specification] WITH
阅读全文
摘要:有时在操作修改的行时从修改的行中获取数据很有用。INSERT、UPDATE 和 DELETE 命令都有一个可选的 RETURNING 子句来支持这一点。使用 RETURNING 可以避免执行额外的数据库查询来收集数据,并且在很难可靠地识别修改的行时尤其有价值。 RETURNING 子句允许的内容与
阅读全文
摘要:创建表时,它不包含任何数据。在数据库发挥作用之前要做的第一件事就是插入数据。数据一次插入一行。您还可以在单个命令中插入多行,但不能插入不完整的行。即使您只知道某些列值,也必须创建完整的行。 要创建新行,请使用 INSERT 命令。该命令需要表名和列值。例如: CREATE TABLE produ
阅读全文
摘要:分区是指将逻辑上是一张大表拆分为较小的物理块。分区可以提供几个好处: 在某些情况下,查询性能可以显着提高,尤其是当表的大部分访问量很大的行位于单个分区或少数几个分区中时。分区有效地替代了较高的树级别索引,使得索引的大量使用部分更有可能适合内存。 当查询或更新访问单个分区的大部分时,可以通过使用该分区
阅读全文
摘要:让我们从一个例子开始:假设我们正在尝试为城市构建一个数据模型。每个州都有许多城市,但只有一个首府。我们希望能够快速检索任何特定州的首都。这可以通过创建两张表来完成,一张用于州首府,一张用于非首都城市。但是,当我们想要查询一个城市的数据时会发生什么,无论它是否是首都?继承特性可以帮助解决这个问题。我们
阅读全文
摘要:数据库包含一个或多个命名模式,这些模式又包含表。模式还包含其他类型的命名对象,包括数据类型、函数和运算符。相同的对象名称可以在不同的模式中使用而不会发生冲突;例如,schema1 和 myschema 都可以包含名为 mytable 的表。与数据库不同,模式不是严格分开的:用户可以访问他们连接到的数
阅读全文
摘要:除了通过 GRANT 提供的 SQL 标准权限系统之外,表还可以具有行安全策略,这些策略基于每个用户来限制正常查询可以返回哪些行,或者可以通过数据修改命令插入、更新或删除哪些行。此功能也称为行级安全性。默认情况下,表没有任何策略,因此如果用户根据 SQL 权限系统对表具有访问权限,则表中的所有行都可
阅读全文
摘要:当一个对象被创建时,它被分配了一个所有者。所有者通常是执行创建语句的角色。对于大多数类型的对象,初始状态是只有所有者(或超级用户)可以对对象执行任何操作。要允许其他角色使用它,必须授予权限。 有不同种类的权限:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENC
阅读全文
摘要:当您创建一个表并意识到您犯了一个错误,或者应用程序的需求发生变化时,您可以删除该表并重新创建它。但是,如果表已经被数据填充,或者表被其他数据库对象引用(例如外键约束),这不是一个方便的选择。因此 PostgreSQL 提供了一系列命令来修改现有的表。请注意,这在概念上与更改表中包含的数据不同:这里我
阅读全文
摘要:每个表都有几个由系统隐式定义的系统列。因此,这些名称不能用作用户定义列的名称。(请注意,这些限制与名称是否是关键字是分开的;引用名称不会让您逃避这些限制。)您实际上不需要关心这些列;只知道它们存在。 tableoid 包含此行的表的 OID。该列对于从分区表或继承层次结构中进行选择的查询特别方便,因
阅读全文
摘要:一、类型转换的方式 CAST ( expression AS type ) expression::type typename ( expression ) 二、生成列 生成的列是始终从其他列计算的特殊列。因此,对于列,视图对于表是一样的。生成的列有两种:存储列和虚拟列。存储生成的列在写入(插入或更
阅读全文

浙公网安备 33010602011771号