【Spring】使用数据源连接池访问数据库

Spring并没有提供数据源连接池实现,但是可以选择其他开源的实现:

这些连接池中得大多数都能配置为Spring的数据源,在一定程度上与Spring自带的DriverManagerDataSource或SingleConnectionDataSource很类似。如下是配置DBCP BasicDataSource的方式:

也可以用Java来配置:

上面两种方式配置的四个属性是BasicDataSource所必需的。属性driverClassName指定了JDBC驱动类的全限定类名。在这里我配置的时MySql数据库的数据源  。属性url用于设置数据库的JDBC URL。最后,username和password用于在连接数据库时进行认证。

【Spring】Spring的AOP术语解释

通知(Advice)

切面的工作被称为通知,通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。它应该应用在某个方法被调用之前?之后?之前和之后都调用?还是只是在方法抛出异常时调用?

Spring切面可以应用5种类型的通知:

+ 前置通知(Before):在目标方法被调用之前调用通知功能;

+ 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;

+ 返回通知(After-returning):在目标方法成功执行之后调用通知;

+ 异常通知(After-throwing):在目标方法抛出异常后调用通知;

+ 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

连接点(Join point)

连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。

切点(Pointcut)

切点有助于缩小切面所通知的连接点的范围。切点的定义会匹配通知所要植入的一个或多个连接点。

切面(Aspect)

切面是通知和切点的结合。通知和切点共同定义了切面的全部内容——它是什么,在何时和何处完成其功能

【Spring】bean的作用域

在默认情况下,Spring应用上下文中所有bean都是作为以单例(singleton)的形式创建的。也就是说,不管给定的一个bean被注入到其他bean多少次,每次所注入的都是同一个实例。

在大多数情况下,单例bean是很理想的方法。初始化和垃圾回收对象实例所带来的成本只留给一些小规模任务,在这些任务中,让对象保持无状态并且在应用中反复重用这些对象可能并不合理。

有写时候,我们所使用的类是易变的(mutable),它们会保持一些状态,因此重用是不安全的。在这种情况下将class声明为单例的bean就不是很好了,因为对象会被污染

Spring定义了多种作用域,可以基于这些作用域创建bean,包括:

  • 单例(singleton):在整个应用中,只创建bean的一个实例。
  • 原型(Prototype):每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
  • 会话(Session):在Web应用中,为每个会话创建一个bean实例。
  • 请求(Request):在Web应用中,为每个请求创建一个bean实例。

单例是默认的作用域,但是对于易变的类型这是不合适的。如果选择其他的作用域,要使用@Scope注解,它可以与@Component或@Bean一起使用。

如下是分别对@Component和@Bean使用@Scope注解

 

【计算机网络】时延、发送时延、传输时延、处理时延、排队时延、时延带宽积

时延:指数据从网络的一端传送到另一端所需的时间

发送时延(传输时延):是主机或路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间,发送时延 = 数据帧长度(b) / 信道带宽(b/s)

传播时延:是电磁波在信道中传播一定的距离需要花费的时间,传播时延 = 信道长度(m) / 电磁波在信道上的传播速率(m/s)

发送时延(传输时延)发生在机器的内部的发送器中,而传播时延则发生在机器外部的传输信道媒体上。

处理时延:主机或路由器在收到分组时要花费一定的时间进行处理,例如分析分组的首部、从分组中提取数据部分、进行差错或查找适当的路由等等

排队时延:分组在经过网络传输时,要经过许多的路由器。但分组在进入路由器后要现在输入队列中排队等待处理。在路由器确定了转发接口后,还要在输出队列中排队等待转发

数据在网络中经历的总时延就是以上四种时延之和:总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延

时延带宽积:时延带宽积 = 传播时延 * 带宽

【例】考虑两台主机A和主机B由一条带宽为R bps、长度为M米的链路互连,信号传播速率为V m/s。假设主机A从t=0时刻开始向主机B发送分组,分组长度为L比特。试求:

1) 传播延迟(时延)dp;

2) 传输延迟dt;

3) 若忽略结点处理延迟和排队延迟,则端到端延迟de是多少?

4) 若dp>dt,则t=dt时刻,分组的第一个比特在哪里?

5) 若V=250000km/s,L=512比特,R=100 Mbps,则使带宽时延积刚好为一个分组长度(即512比特)的链路长度M是多少?

(注:1k=10^3,1M=10^6)

【解】1)传播时延dp = 信道长度(m) / 电磁波在信道上的传播速率(m/s) = M / V

2)传输延迟dt = 数据帧长度(b) / 信道带宽(b/s) = L / R

3)总延迟de = 传播时延 + 传输延迟 = M / V + L / R

4)dp > dt意味着最早发送的信号没有到达目的主机之前,数据分组的最后一个比特已经发送出来了,所以分组的第一个比特在距离主机的V * dt米的链路上

5)时延带宽积 = 传播时延 * 带宽 = M / V * R = 512,解之得M = 1280米