定义工具类

public class CommandUtils{    /**    * command 要执行的文件或命令   call回调函数    **/    public static void exec(String command,ICommandCall call){        try{            if(StringUtils.isEmpty(command)){                log.error("没有要执行的命令。。");                return;            }            StringBuffer cmd = new StringBuffer();            //获取操作系统标识            String osName = System.getProperty(os.name);            if(os.startsWith(Window)){                //window实现(利用比拟少 不展现具体内容)            }else if(osName.equals("Linux")){                //linux实现                cmd.append("sh ");                cmd.append(command);                cmd.append(" &");            }            String cmds = cmd.toString();            log.info("启动执行:"+cmds);            Process process = Runtime.getRuntime().exec(cmds);            printMessage(process.getInputStream(),call);            int waitFor = process.waitFor();            log.info("waitFor:"+waitFor);            process.destroy();        }catch(Exception e){            log.error(e.getMessage(),e);        }    }    //读取输出流办法     static void printMessage(final InputStream inputStream,ICommand call){        Thread thread = new Thread(new Runnable(){            @override            public void run(){                try{                    //获取以后工夫点                    Instant start = DateUtils.instant();                    Reader reader = new InputSteamReader(inputSteam);                    BufferedReader bufferedReader = new BufferedReader(reader);                    String line = "";                    while((line = befferedReader.readLine()) != null){                        log.info(line);                        //获取两分钟之后的工夫点                        Long durationMinutes = DateUtils.getDurationMinues(start,DateUtils.minute);                        //判断以后工夫点是否大于两分钟                        if(durationMinutes == Long.valueOf(2)){                            log.info("调用超时。。");                            break;                        }else{                            //执行调用逻辑                            if(StringUtils.contains(line,"stop success")){                                //承受到返回值命令退出 并解决绝对应的业务逻辑                                break;                                                      }                        }                    }                     if(call != null){                         //如果定义了回调函数 执行                        call.call();                    }                    //敞开流                    bufferedReader.close();                }catch(){                    log.error("异样:"+e.getMessage());                }            }        });        thread.start();        thread.join();  //阻塞主线程 期待主线程执行完    }}

留神: 定义工具类时可依据本身须要,是否抉择解决多线程问题,是否须要返回值决定回调函数进行哪些封装须要,肯定要设置超时工夫防止线程无奈退出!

应用

public void test(){    Thread t = new Thread(()->{        //以linux门路 为例,启动某个tomcat服务        CommandUtils.exec("/data/test/start.sh",null);    });    t.start();    t.join();}

通过线程触发不影响办法整体返回值,对子线程进行阻塞,如果超时子线程也会进行退出,不影响下层办法的调用。
外汇IB https://www.fx61.com/ib.html

工夫工具类

import java.text.ParseException;import java.text.SimpleDateFormat;import java.time.DayOfWeek;import java.time.Duration;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.Period;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;import java.time.temporal.Temporal;import java.time.temporal.TemporalAdjusters;import java.util.Date;import org.apache.commons.lang3.StringUtils;public class DateUtils {    public static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");    public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");    public static final SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    public static final String minute = "Minute";    public static final String millis = "Millis";    public static final String hours = "Hours";    public static void main(String[] args) {        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        String dt1 = getCurrentLocalDateTime().format(DATETIME_FORMATTER);        try {            Thread.sleep(5000);            String dt2 = getCurrentLocalDateTime().format(DATETIME_FORMATTER);            Instant start = sd.parse(dt1).toInstant();            Instant end = sd.parse(dt2).toInstant();            System.out.println(durationMinutes(start, end) == Long.valueOf(1));            long durationMillis = durationMillis(start, end);            System.out.println(durationMillis);        } catch (Exception e) {            e.printStackTrace();        }    }    //获取以后工夫转换为Instant类型    public static Instant instant() throws ParseException {        String dt = getCurrentLocalDateTime().format(DATETIME_FORMATTER);        return sd.parse(dt).toInstant();    }    public static Long getDurationMinutes(Instant start, String type) throws ParseException {        Instant end = instant();        Long duration = null;        if (StringUtils.equals(minute, type)) {            duration = DateUtils.durationMinutes(start, end);        } else if (StringUtils.equals(millis, type)) {            duration = DateUtils.durationMillis(start, end);        }        return duration;    }    /**     * 返回以后的日期     *     * @return     */    public static LocalDate getCurrentLocalDate() {        return LocalDate.now();    }    /**     * 返回以后日期工夫     *     * @return     */    public static LocalDateTime getCurrentLocalDateTime() {        return LocalDateTime.now();    }    /**     * 返回以后日期字符串 yyyyMMdd     *     * @return     */    public static String getCurrentDateStr() {        return LocalDate.now().format(DATE_FORMATTER);    }    /**     * 返回以后日期工夫字符串 yyyyMMddHHmmss     *     * @return     */    public static String getCurrentDateTimeStr() {        return LocalDateTime.now().format(DATETIME_FORMATTER);    }    public static LocalDate parseLocalDate(String dateStr, String pattern) {        return LocalDate.parse(dateStr, DateTimeFormatter.ofPattern(pattern));    }    public static LocalDateTime parseLocalDateTime(String dateTimeStr, String pattern) {        return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern(pattern));    }    /**     * 日期相隔天数     *     * @param startDateInclusive     * @param endDateExclusive     * @return     */    public static int periodDays(LocalDate startDateInclusive, LocalDate endDateExclusive) {        return Period.between(startDateInclusive, endDateExclusive).getDays();    }    /**     * 日期相隔小时     *     * @param startInclusive     * @param endExclusive     * @return     */    public static long durationHours(Temporal startInclusive, Temporal endExclusive) {        return Duration.between(startInclusive, endExclusive).toHours();    }    /**     * 日期相隔分钟     *     * @param startInclusive     * @param endExclusive     * @return     */    public static long durationMinutes(Temporal startInclusive, Temporal endExclusive) {        return Duration.between(startInclusive, endExclusive).toMinutes();    }    /**     * 日期相隔毫秒数     *     * @param startInclusive     * @param endExclusive     * @return     */    public static long durationMillis(Temporal startInclusive, Temporal endExclusive) {        return Duration.between(startInclusive, endExclusive).toMillis();    }    /**     * 是否当天     *     * @param date     * @return     */    public static boolean isToday(LocalDate date) {        return getCurrentLocalDate().equals(date);    }    /**     * 获取本月的第一天     *     * @return     */    public static String getFirstDayOfThisMonth() {        return getCurrentLocalDate().with(TemporalAdjusters.firstDayOfMonth()).format(DATE_FORMATTER);    }    /**     * 获取本月的最初一天     *     * @return     */    public static String getLastDayOfThisMonth() {        return getCurrentLocalDate().with(TemporalAdjusters.lastDayOfMonth()).format(DATE_FORMATTER);    }    /**     * 获取2017-01的第一个周一     *     * @return     */    public static String getFirstMonday() {        return LocalDate.parse("2017-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY))                .format(DATE_FORMATTER);    }    /**     * 获取以后日期的后两周     *     * @return     */    public static String getCurDateAfterTwoWeek() {        return getCurrentLocalDate().plus(2, ChronoUnit.WEEKS).format(DATE_FORMATTER);    }    /**     * 获取以后日期的6个月后的日期     *     * @return     */    public static String getCurDateAfterSixMonth() {        return getCurrentLocalDate().plus(6, ChronoUnit.MONTHS).format(DATE_FORMATTER);    }    /**     * 获取以后日期的5年后的日期     *     * @return     */    public static String getCurDateAfterFiveYear() {        return getCurrentLocalDate().plus(5, ChronoUnit.YEARS).format(DATE_FORMATTER);    }    /**     * 获取以后日期的20年后的日期     *     * @return     */    public static String getCurDateAfterTwentyYear() {        return getCurrentLocalDate().plus(2, ChronoUnit.DECADES).format(DATE_FORMATTER);    }    /**     * 字符串转工夫     *     * @return     */    public static LocalDate stringToDate(String time) {        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");        return LocalDate.parse(time, formatter);    }    public static Long getLongTime() {        return new Date().getTime();    }}