每次调用service方法的时候,DataSourceTransactionManager都会首先调用DataSourceUtils的getConnection方法,从而调用dataSource.getConnection(),耗时很严重。
因为service中有cache,先从cache中取,如果取到,则直接返回,如果取不到,则查询数据库,放到cache中,再返回。 大部分的情况是不需要读取数据库的,可spring每次都会获得一个数据库连接。
[b]问题补充:[/b]
不是浪费的问题,而是获得连接这个动作很耗时。在性能测试的时候,占了很大比例。
[b]问题补充:[/b]
这个问题是这几天才发现的,以前并不知道,代码都是这么写的。
service对外提供一个接口,具体实现要不要用cache是实现的问题。而如果按照你说的方法,我的接口中就需要实现两个方法,一个不使用事务,一个使用,暴露两个方法接口,好像不大好啊
[b]问题补充:[/b]
你不写我也知道你的意思。
但还是有我说得问题,本来我只需要提供一个public Object service();可改完之后就还要提供一个 public class DBOperatorService public void service(...)。而这个实际上也是对外暴露的,而又不允许别人调用(虽然有办法解决)。总觉得不太好。