for循环里面创建spring容器,是创建一个sessionFactory还是多个sessionFactory

qq_37591637 2019-10-09 09:53:03
疑惑

1、ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
是创建一个sessionFactory

2、那么如果以上代码在一个for循环里面呢?是创建一个还是多个sessionFactory?

3、在一个类里面装配sessionFactory,如果用完session,关闭session以后,需不需要关闭sessionFactory?

...全文
149 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37591637 2019-10-09
  • 打赏
  • 举报
回复
引用 3 楼 瘦死的黑骆驼 的回复:
肯定创建多个啊,而且每个sessionFactory中的id相同的bean不是同一个对象




如果我关闭了ioc容器呢?还是多个么?
我关闭ioc容器,释放资源,然后再初始化;不还是一个sessionfactory么?
我现在的问题是:
1、我是做一个java项目,socket编程;
2、每次有数据到达的时候,需要对数据进行插入操作;
3、虽然我只有一行初始化spring容器,但是我感觉,每次数据到达,都会初始化一次,类似于for循环的感觉,我感觉是初始化了很多sessionfactory;
4、即使我关闭了容器ioc;即使我使用了c3p0连接池,运行时间长了还是会报错too many connections;
5、我关闭了session,关闭了ioc容器,都关闭了;但是运行时间都不超过24小时;
6、我使用的是netty框架(socket编程的),
public class ServerStringHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
ByteBuf result=(ByteBuf) msg;
byte[] res=new byte[result.readableBytes()];
result=result.readBytes(res);
String str = Tools.bytesToHexString(res);
//判断str是拉绳传感器还是陀螺仪的
if("02".equals(str.substring(0, 2))){
AbstractApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
InsertDate da=(InsertDate) ioc.getBean("goodsServiced");
da.insetshift(str);
ioc.close();
}

result.release();
}
}
qq_37591637 2019-10-09
  • 打赏
  • 举报
回复
引用 4 楼 guishuanglin 的回复:
这个问题关键是:
你需不需要创建多个 sessionFactory, 因为正常的项目 整个系统就一个 sessionFactory 就可以了.

for代码里面当然可以 new 多个sessionFactory, 但是实际上有没有这个需要.




1、我是做一个java项目,socket编程;
2、每次有数据到达的时候,需要对数据进行插入操作;
3、虽然我只有一行初始化spring容器,但是我感觉,每次数据到达,都会初始化一次,类似于for循环的感觉,我感觉是初始化了很多sessionfactory;
4、即使我关闭了容器ioc;即使我使用了c3p0连接池,运行时间长了还是会报错too many connections;
5、我关闭了session,关闭了ioc容器,都关闭了;但是运行时间都不超过24小时;
6、我使用的是netty框架(socket编程的),
public class ServerStringHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
ByteBuf result=(ByteBuf) msg;
byte[] res=new byte[result.readableBytes()];
result=result.readBytes(res);
String str = Tools.bytesToHexString(res);
//判断str是拉绳传感器还是陀螺仪的
if("02".equals(str.substring(0, 2))){
AbstractApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
InsertDate da=(InsertDate) ioc.getBean("goodsServiced");
da.insetshift(str);
ioc.close();
}

result.release();
}
}
guishuanglin 2019-10-09
  • 打赏
  • 举报
回复
这个问题关键是: 你需不需要创建多个 sessionFactory, 因为正常的项目 整个系统就一个 sessionFactory 就可以了. for代码里面当然可以 new 多个sessionFactory, 但是实际上有没有这个需要.
瘦死的黑骆驼 2019-10-09
  • 打赏
  • 举报
回复
肯定创建多个啊,而且每个sessionFactory中的id相同的bean不是同一个对象
qq_37591637 2019-10-09
  • 打赏
  • 举报
回复
引用 1 楼 guishuanglin 的回复:
sessionFactory一个就够了, 除非有特殊需要.


我的意思是:因为我开了一个线程,需要不断的执行new ClassPathXmlApplicationContext("applicationContext.xml");当然我也关闭了ioc容器;我想知道是如果不关闭是不是创建了多个sessionFactory啊
guishuanglin 2019-10-09
  • 打赏
  • 举报
回复
sessionFactory一个就够了, 除非有特殊需要.
guishuanglin 2019-10-09
  • 打赏
  • 举报
回复
spring容器 是一个框架, 他的东西是独立于业务代码之外的, 不要把初始容器代码 放在业务代码中. 初始容器代码应在系统启动时初始化.
guishuanglin 2019-10-09
  • 打赏
  • 举报
回复
ioc.close(); 不再需要了, 整个系统用这个 APP_CONTEXT 就是了, 不要关闭.
guishuanglin 2019-10-09
  • 打赏
  • 举报
回复
晕啊,楼主......不能这么写代码啊 有种东西叫全局变量:

	public class ServerStringHandler extends ChannelInboundHandlerAdapter {
                //全系统公共静太变量, 所有代码中都可以用同一个容器, 你也可以定义在别的地方.
		public static AbstractApplicationContext APP_CONTEXT = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		@Override
		public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
			ByteBuf result = (ByteBuf) msg;
			byte[] res = new byte[result.readableBytes()];
			result = result.readBytes(res);
			String str = Tools.bytesToHexString(res);
			// 判断str是拉绳传感器还是陀螺仪的
			if ("02".equals(str.substring(0, 2))) {
				InsertDate da = (InsertDate) APP_CONTEXT.getBean("goodsServiced");
				da.insetshift(str);
				ioc.close();
			}

			result.release();
		}
	}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧