在本线程中添加object数据,必须在本线程中才能获取出来。。其他线程获取不到。
public class Test {
public static void main(String[] args) {
final ThreadLocal<String> thread=new ThreadLocal<>();
thread.set("助兴"); new Thread(){
@Override
public void run() {
String temp=thread.get();
System.out.println("结果是:"+temp);
};
}.start(); 这样是获取不到结果的!!!!!
}
}
Filter过滤器和Servlet在一个线程中,并且在servlet前面执行,这就可以在Filter过滤器中添加数据,让Servlet使用。。
service中的sqlsessionFactory 实例化的过程是一个比较耗费性能的过程
public class mybtaisutil { 通过这种方式可以保证只有一个factory
private static SqlSessionFactory factory;
static{
try {
InputStream is = Resources.getResourceAsStream("mybatis.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取sqlsession对象
*/
public static SqlSession getsession(){
SqlSession session = tl.get();
if(session==null){
tl.set(factory.openSession());
}
return tl.get();
}
关闭sqlsession对象
public static void closesession(){
SqlSession session = tl.get();
if(session!=null){
session.close();
}
tl.set(null);
}
}