当前位置: 首页 > news >正文

在哪里个网站找专业做ps的人舟山百度seo

在哪里个网站找专业做ps的人,舟山百度seo,wordpress 图片cms主题,webapi做网站前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下:1、定义一个类Apppackage com.cnblogs.yjmyzz.web.controller;import java.util.Date;public class A…

前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下:

1、定义一个类Apppackage com.cnblogs.yjmyzz.web.controller;

import java.util.Date;

public class App {

boolean isRun = false;

public App() {

isRun = true;

}

public void start() {

while (isRun) {

System.out.println("=======> I AM ALIVE =>" + new Date());

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public void stop() {

isRun = false;

}

}

代码里面的内容不是重点,只是示意一下,我打算在spring mvc 应用一启动时,就让这个类实例化,执行其中的start方法,即:每隔一秒输出一句话。

2、定义一个Listenerimport com.cnblogs.yjmyzz.web.controller.App;

import org.springframework.context.ApplicationListener;

import org.springframework.context.event.ContextRefreshedEvent;

import org.springframework.stereotype.Component;

@Component

public class StartupListener implements ApplicationListener {

App app;

@Override

public void onApplicationEvent(ContextRefreshedEvent evt) {

if (evt.getApplicationContext().getParent() == null) {

new Thread(new Runnable() {

@Override

public void run() {

app = new App();

app.start();

}

}).start();

}

}

}

代码也很简单,应用一启动,就开一个线程,实例化App,然后调用app.start()方法,运行一下,也跟预期的一样,每隔一秒输出类似下面的内容:

=======> I AM ALIVE =>Wed Sep 16 21:55:42 CST 2015

正式部署到jboss上以后,问题来了,在jboss管理控制台上,把这个应用给disable甚至remove后,日志里仍然不断有上面的类似输出,即app的实例仍然活着,其start方法也始终在运行,换句话说,app并没有被销毁。

简单分析一下:jboss的每个server启动后,会伴随启动一个jvm实例,而部署在该server上的web应用,里面创建的各种资源也在这个jvm实例中,就算把应用给停掉甚至删除,由于代码中没有任何清除app或停止start方法的处理,所以这个实例一直存在,不会被销毁,除非server重启。

另一个问题:如果把上面这段代码中,创建线程的部分去掉,改成直接 app = new App(); app.start(); 部署时会发现另一个现象,日志里仍然不断有输出,即代码在执行,但是该应用在jboss中的状态始终是isdeploying,部署一直无法结束,始终处于『部署中』的状态。

原因:start方法中的Thread.sleep()方法会阻塞线程,导致部署无法执行完毕。

解决办法:import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

import javax.annotation.PreDestroy;

import java.util.Date;

@Component

public class App {

boolean isRun = false;

@PostConstruct

public void init() {

System.out.println("init ==> " + new Date());

isRun = true;

}

public void start() {

while (isRun) {

System.out.println("=======> I AM ALIVE =>" + new Date());

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public void stop() {

isRun = false;

}

@PreDestroy

public void destroy() {

System.out.println("destroy ==> " + new Date());

stop();

}

}

这里做了几处改进:

a) 加上@Component后,App的实例将由Spring容器自动创建,即由容器来管理

b) 加上了@PreDestroy,Bean的生命周期由Spring容器来管理后,凡是Bean里加上该注解的方法,会在Bean销毁前被执行,通常该方法用于清理资源

c) 将初始化的工作,移到了init方法中,并通过@PostConstruct注解告诉Spring,在调用完Bean的默认构造方法后,自动来调用该方法(当然这一步是可选的,并非必须)@Component

public class StartupListener implements ApplicationListener {

@Autowired

App app;

@Override

public void onApplicationEvent(ContextRefreshedEvent evt) {

if (evt.getApplicationContext().getParent() == null) {

new Thread(new Runnable() {

@Override

public void run() {

app.start();

}

}).start();

}

}

}

Listener中就简单多了,直接@Autowired注入app实例就行了。

个人建议:

a) 如果要在web 应用一启动时,就执行某些操作,特别是对资源类的长连接实例创建(比如:加载数据到缓存中预热、连接到Zookeeper监控节点变化、连接到Ftp准备取数据),最好交给Spring容器来自动创建,且务必记得在Destroy前,清理资源(即:断开连接)

b) 在启动的执行逻辑中,不要使用阻塞线程的操作(比如:Thread.sleep之类的方法),否则部署时,实际上代码已经在后台执行了,jboss管理控制台上,一直处于部署中的状态,也没有任何输出,让人一头雾水,折腾半天才能定位错误,很浪费时间,如果是线上生产环境,是要粗事情的。

http://www.lbrq.cn/news/2350243.html

相关文章:

  • 网站的底部导航怎么做个人网页制作完整教程
  • 怎么看一个网站什么程序做的个人网页制作完整教程
  • 做网站需要准备什么搜索引擎优化seo专员招聘
  • 想采集某类型网站怎么做谷歌浏览器网页版
  • 动易门户网站价格手机管家一键优化
  • 网站网页和网址的关系百度关键词下拉有什么软件
  • dw建立网站之后怎么做东莞seo网站排名优化
  • 网站开发技术语言的选择系统优化是什么意思
  • 做网站用什么今天的新闻
  • 在百度建免费网站吗网络营销师证书含金量
  • 网站怎样做优化百度快照投诉中心官网
  • 网站html地图导航代码2021最近最火的关键词
  • 用mvc做网站的框架今日小说百度搜索风云榜
  • 商标注册证在哪里可以查到志鸿优化网下载
  • 加强局网站建设竞价推广工具
  • 怎么做网站写书优化seo哪家好
  • 如何选择商城网站建设成都百度业务员电话
  • 服务型政府网站建设html制作网页代码
  • 怎么申请自己的网站网址如何下载视频
  • 怎么免费制作网站平台某网站seo诊断分析和优化方案
  • wordpress速度很慢合肥百度快速排名优化
  • 送给做网站的锦旗语天猫店铺申请条件及费用
  • 兰州做网站一咨询兰州做网站公司百度网盟
  • 网站建设学习步骤seo咨询顾问
  • 制作网站怎么做的南京百度网站快速优化
  • win10搭建服务器做网站网络服务器
  • asp网站模板安装制作网站
  • 网站被墙怎么办简述seo的概念
  • 中山网站建设联系电话今日国内新闻大事20条
  • wordpress 腾讯企业邮箱seo优化软件哪个好
  • UniApp 多端人脸认证图片上传实现
  • 壹脉销客AI电子名片源码核心架构
  • 【安卓笔记】RxJava之flatMap的使用
  • 设备发出、接收数据帧的工作机制
  • AI Linux 运维笔记
  • 人工智能如何重构能源系统以应对气候变化?