关于jdbcTemplate的疑问

问题描述

引用

解决方案

恩,以前依照源代码为准,我前面是臆想
解决方案二:
JdbcTemplate用了ThreadLocal,使各线程能够保持各自独立的一个对象,其实就是一个变量副本,实现了线程安全。
解决方案三:
JdbcTemplate类的实例是线程安全的实例。这一点非常重要,正因为如此,你可以配置一个简单的JdbcTemplate实例,并将这个“共享的”、“安全的”实例注入到不同的DAO类中去。 另外, JdbcTemplate 是有状态的,因为他所维护的DataSource 实例是有状态的,但是这种状态是无法变化的。 一旦JdbcTemplate被创建,他是一个线程安全的对象。 一个你需要创建多次JdbcTemplate实例的理由可能在于,你的应用需要访问多个不同的数据库,从而需要不同的DataSources来创建不同的JdbcTemplates实例。
解决方案四:
线程安全主要在org.springframework.transaction.support.TransactionSynchronizationManager中,使用ThreadLocal来保证线程安全TransactionSynchronizationManager类中声明了:private static final ThreadLocal resources =new NamedThreadLocal("Transactional resources");private static final ThreadLocal synchronizations =new NamedThreadLocal("Transaction synchronizations");private static final ThreadLocal currentTransactionName =new NamedThreadLocal("Current transaction name");private static final ThreadLocal currentTransactionReadOnly =new NamedThreadLocal("Current transaction read-only status");private static final ThreadLocal currentTransactionIsolationLevel =new NamedThreadLocal("Current transaction isolation level");private static final ThreadLocal actualTransactionActive =new NamedThreadLocal("Actual transaction active");看看源代码就会很清楚了
解决方案五:
JdbcTemplate其实是JDBC的封装,包括了捕获异常、SQL执行、结果转换等。因为是设计模式里面的模版模式,所以叫做xxxTemplatedatasource是更底层的调用,datasource是java.sql的直接实现类,这里你可以实现带链接池的connection或者其它,一般来说,我们的datasource只指向一个数据库,一个数据库只有一个datasource,这样就能方便的管理这个数据库的链接,链接池的个数等等你可以想像,每一个次的http请求,都是不同的线程,每一次http请求,都几乎会调用数据库,那么通过jdbctemplate调用数据库肯定需要线程安全(其实这个不难,无状态即可,无共享变量),因为datasource只有一个(因为他要管理所有的链接池,这个数据库都是它来负责管理的),每次,jdbcTemplate从datasource里面获得connection,然后sql语句进去,获得结果返回,通过jdbcTemplate直接转化为你自己的结果,就好了,最后jdbctemplate关闭链接池(其实是送回datasource)。

时间: 2024-11-23 07:15:17

关于jdbcTemplate的疑问的相关文章

关于JdbcTemplate和in的使用疑问

问题描述 如select*fromuserswhereidin.....该如何使用?jdbcTemplate.update(sql,newObject[]{}); 解决方案 解决方案二:需要根据参数的个数生成in后的?字符串,然后再用参数去查询解决方案三:springJdbcTemplatein必需要加括号select*fromuserswhereidin(?);注意传入参数的个数及顺序解决方案四:引用2楼whos2002110的回复: springJdbcTemplatein必需要加括号sel

dreaweaver-关于网页边框使用的问题,新手有疑问

问题描述 关于网页边框使用的问题,新手有疑问 右下边框mp3,视频,图片--这个内嵌表格为什么不是在左上角开始,而是跑中间去了-求解 解决方案 td默认就是水平居中的,你要居上给td添加valign="top" <td width="760" valign="top"> 解决方案二: 新手使用python常见问题 解决方案三: 给table或者td写样式啊,实在不行就打开开发者工具看看居中的那个块元素在哪个位置.然后根据实际情况去加样

java中++a和a++ 在数组实现栈中的小疑问

问题描述 java中++a和a++ 在数组实现栈中的小疑问 package 数组实现栈; public class StackArray implements Stack { public static final int num = 1024;//数组默认容量 public int capacity;//数组实际容量 public Object s[];//对象数组 public int top = -1;//栈顶元素位置 //构建默认容量栈对象 public StackArray() { t

软件测试-linux代码覆盖率测试工具gcov的一些疑问?

问题描述 linux代码覆盖率测试工具gcov的一些疑问? 鄙人是做软件测试的,最近在使用gcov来检查代码覆盖率,我已经成功生成了一份关于touchscreen测试代码的gcov文件,但是领导说这不是他想要的...所以我想请教一下大家:1. 如果我想测试平台上的touchscreen模块,那么目的肯定是这样:首先我要看下我写的测试code是否存在多余的根本跑不到的代码,如果有,那我肯定要优化我的测试代码:其次,我肯定也要看我写的代码在linux kernel里面的覆盖情况,如果我写的测试代码在

php-ecshop获取端口的疑问

问题描述 ecshop获取端口的疑问 if (isset($_SERVER['SERVER_PORT'])) { $port = ':' . $_SERVER['SERVER_PORT']; if ((':80' == $port && 'http://' == $protocol) || (':443' == $port && ' https://' == $protocol)) { $port = ''; } } 其中 if ((':80' == $port &

汇编语言-汇编MOV的一点疑问!!!

问题描述 汇编MOV的一点疑问!!! DATA SEGMENT USE16 MES1 DB 'Please input:',0AH,0DH,'$' SD DB ? DATA ENDS 然后 MOV AH,1 INT 21H MOV SD,AL 然后就对SD进行操作了 想问下MOV的目的操作数可以是变量(SD)吗??不是只能是寄存器和存储器吗? 解决方案 MOV AH,1 INT 21H 是自动转入中断子程序的入口 通过上面两条指令,会把输入或者读取的字符放到AL中,所以是MOV SD,AL 解决

jvm-java锁竞争检测的疑问

问题描述 java锁竞争检测的疑问 看优化的书,上面提到现在JVM对锁进行了优化,有锁竞争,JVM底层先是自旋,再调用底层操作系统的锁,然后现在用看主动上下文切换,和被动上线文切换的差/NCPU*80000/频率 看是否大于百分之5,来判断是否有锁.上下文切换知道是多线程的运行导致,但是不明白主动上下切换,和被动上下文的切换的区别,以及这个公式有为什么这么来?希望懂的大牛解释下哈

openwrt luci-关于刚学习luci 界面修改时的疑问

问题描述 关于刚学习luci 界面修改时的疑问 1.通过cbi,将界面中的值修改后,会将其自动保存到相应的config中,其中的ui方式的实现方式,基本的工作流程是怎么样的? 比如说,我不想保存到etc/config下的配置文件中,想要保存到其他文件中具体该怎么做 2.entry 第一个参数path 的第三项或者之后几项的具体作用是什么, 比如说第三个参数如果我定义为"" 则无法形成我创建的界面,那我随便定义一个值,就能出现我的界面,那是否说第三个参数的值可以随我们定义,没有多大作用,

索引-关于B-tree 的bulkloading的构造方法的疑问

问题描述 关于B-tree 的bulkloading的构造方法的疑问 关于B-tree的构造,我见过的很多书包括文章都是通过线性insert操作完成,http://en.wikipedia.org/wiki/B-tree里面就提到:it is frequently useful to build a B-tree to represent a large existing collection of data and then update it incrementally using stan