优化:异常处理、异常提示

pull/12/head
陈精华 5 years ago committed by kl
parent 0798b8d8a0
commit 5888c56f1d

@ -6,14 +6,20 @@ import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
import org.artofsolving.jodconverter.office.OfficeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
*
@ -24,6 +30,8 @@ import java.util.Map;
@Component
public class ConverterUtils {
private final Logger logger = LoggerFactory.getLogger(ConverterUtils.class);
// @Value("${office.home}")
// String officeHome;
// OpenOfficeConnection connection;
@ -31,18 +39,28 @@ public class ConverterUtils {
@PostConstruct
public void initOfficeManager() {
//// connection = new SocketOpenOfficeConnection(host,8100);
//// connection.connect();
String officeHome = OfficeUtils.getDefaultOfficeHome().getAbsolutePath();
if (officeHome == null) {
throw new RuntimeException("找不到office组件请确认'office.home'配置是否有误");
}
boolean killOffice = killProcess("soffice.bin");
if (killOffice) {
logger.warn("检测到有正在运行的office进程已自动结束该进程");
}
try {
DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
configuration.setOfficeHome(officeHome);
configuration.setPortNumber(8100);
officeManager = configuration.buildOfficeManager();
officeManager.start();
// 设置任务执行超时为5分钟
// configuration.setTaskExecutionTimeout(1000 * 60 * 5L);//
configuration.setTaskExecutionTimeout(1000 * 60 * 5L);
// 设置任务队列超时为24小时
// configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);//
//configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);
officeManager = configuration.buildOfficeManager();
officeManager.start();
} catch (Exception e) {
logger.error("启动office组件失败请检查office组件是否可用");
throw e;
}
}
public OfficeDocumentConverter getDocumentConverter() {
@ -60,6 +78,48 @@ public class ConverterUtils {
return loadProperties;
}
private boolean killProcess(String processName) {
boolean flag = false;
Properties props = System.getProperties();
try {
if (props.getProperty("os.name").toLowerCase().contains("windows")) {
Process p = Runtime.getRuntime().exec("cmd /c tasklist ");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream os = p.getInputStream();
byte b[] = new byte[256];
while (os.read(b) > 0) {
baos.write(b);
}
String s = baos.toString();
if (s.indexOf(processName) >= 0) {
Runtime.getRuntime().exec("taskkill /im " + processName + " /f");
flag = true;
} else {
flag = false;
}
}else {
Process p = Runtime.getRuntime().exec(new String[]{"sh","-c","ps -ef | grep "+processName});
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream os = p.getInputStream();
byte b[] = new byte[256];
while (os.read(b) > 0) {
baos.write(b);
}
String s = baos.toString();
if (s.indexOf(processName) >= 0) {
String[] cmd ={"sh","-c","killall -9 "+processName};
Runtime.getRuntime().exec(cmd);
flag = true;
} else {
flag = false;
}
}
} catch (IOException e) {
logger.error("检测office进程异常", e);
}
return flag;
}
@PreDestroy
public void destroyOfficeManager(){
if (null != officeManager && officeManager.isRunning()) {

@ -32,7 +32,7 @@
<img src="images/sorry.jpg" />
<span>
该文件类型(${fileType})系统暂时不支持在线预览,<b>说明</b>
<p>${msg}</p>
<p style="color: red;">${msg}</p>
如有需要请联系<a href="mailto:1210893441@qq.com">@HappyPig</a>
</span>
</div>

Loading…
Cancel
Save