#!/bin/bash

if [ -f ~/.bash_profile ];
then
  . ~/.bash_profile
fi

JAVA_HOME=/usr/local/usr_software/jdk_1.8.0.121
JRE_HOME=/usr/local/usr_software/jdk_1.8.0.121/jre
MAVEN_HOME=/usr/local/usr_software/maven_3.3.9
REDIS_HOME=/usr/local/usr_software/redis
MYSQL_HOME=/usr/local/usr_software/mysql_5.7.18
NODE_HOME=/usr/local/usr_software/node-v8.2.1-linux-x64
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$REDIS_HOME/bin:$MYSQL_HOME/bin:$NODE_HOME/bin:$PATH
export PATH

java -jar /usr/local/usr_application/script/script-1.0.0.jar taskName:MobileAuthTask prop:test >> /dev/null

package com.vcredit.script;

import com.vcredit.script.exception.InvalidParamException;
import com.vcredit.script.model.frame.TaskInfo;
import com.vcredit.script.task.Task;
import com.vcredit.script.utils.ApplicationContextUtils;
import com.vcredit.script.utils.DateUtils;
import com.vcredit.script.utils.DdqStringUtils;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.ImportResource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.util.ObjectUtils; import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties; /**
* Description:基础应用配置类
*
* @author : dfz
* Created_Date : 2017-06-05 11:52
*/
@Slf4j
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan(value = {"com.vcredit.*"})
@ImportResource(value = {"classpath*:spring/**/*-config*.xml"})
@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)
@EnableTransactionManagement(proxyTargetClass = true)
public class Application { public static void main(String[] args) throws IOException {
String propName = getPropertiesName(args);
startWithProjectProperties(args, propName); log.info("↓");
log.info("╭(●`∀´●)╯ Spring-context loaded ╰(●’◡’●)╮");
log.info("↓"); List<TaskInfo> taskInfoList = getTaskInfoList(args);
if (taskInfoList != null && taskInfoList.size() > 0) {
log.info("任务信息概览 ↓");
log.info("==============================================================================");
log.info("|");
log.info("| 当前时间 : [ {} ] ", DateUtils.dateToString(new Date()));
log.info("| 激活配置 : [ {} ] ", propName);
log.info("| 任务列表 : [ {} ] ", DdqStringUtils.toString(taskInfoList));
log.info("|");
log.info("==============================================================================");
for (TaskInfo taskInfo : taskInfoList) {
new Thread(() -> {
try {
MDC.put("TRACE_ID", DdqStringUtils.generateDateBasedUUID());
Object task = ApplicationContextUtils.getBean(DdqStringUtils.firstLtrLower(taskInfo.getTaskName()));
if (task != null && task instanceof Task) {
log.info("任务 : [ {} ] 开始执行..", taskInfo.getTaskName());
((Task) task).run(taskInfo.getTaskParams());
} else {
log.info("任务 : [ {} ] 不存在! 将被跳过..", taskInfo.getTaskName());
}
} catch (Exception e) {
log.error("任务 : [ {} ] 执行失败.. Exception:", taskInfo.getTaskName(), e);
}
}).start();
}
} else {
log.info("未检测到任何任务! 请检查请求参数. 程序即将退出..");
}
} // ---------------------------------------------------------------------------------------------------
// -------------------------------------↓ Private Methods ↓-------------------------------------------
// ---------------------------------------------------------------------------------------------------
private static void startWithProjectProperties(String[] args, String propertiesName) throws IOException { Properties properties = new Properties(); InputStream in = Application.class.getClassLoader().getResourceAsStream(propertiesName); properties.load(in); SpringApplication application = new SpringApplication(Application.class); application.setDefaultProperties(properties); application.run(args); } // 获取任务名 private static List<TaskInfo> getTaskInfoList(String[] args) { if (ObjectUtils.isEmpty(args)) { return null; } List<TaskInfo> resultList = new ArrayList<>(); for (String str : args) { if (str.contains("taskName")) { String[] taskInfoArr = str.split(":"); if (ObjectUtils.isEmpty(taskInfoArr) || taskInfoArr.length != 2) { continue; } List<TaskInfo> tmp = parseTaskInfo(taskInfoArr[1]); if (tmp != null) { resultList.addAll(tmp); } } } return resultList; } // 解析任务参数 private static List<TaskInfo> parseTaskInfo(String arg) { String[] taskInfoArr = arg.split(","); List<TaskInfo> resultList = new ArrayList<>(); for (String taskInfo : taskInfoArr) { String[] tmpArr = taskInfo.split("\\?"); if (ObjectUtils.isEmpty(tmpArr) || DdqStringUtils.isBlank(tmpArr[0])) { throw new InvalidParamException(); } String taskName = tmpArr[0]; String taskParams = tmpArr.length > 1 ? tmpArr[1] : null; resultList.add(new TaskInfo(taskName, taskParams)); } return resultList; } private static String getPropertiesName(String[] args) { String propertiesName = "dev";// 默认dev if (args == null || args.length == 0) { return propertiesName; } for (String str : args) { if (str.contains("prop")) { propertiesName = str.split(":")[1]; } } return "config/" + propertiesName + ".properties"; }}

Springboot关于脚本脚本启动的项目:的更多相关文章

  1. 执行Java脚本firefox启动成功,不运行test方法,且提示NullPointerException

    在ideal中新建maven项目,将录制好的Java脚本文件,直接复制到项目中,添加相关的依赖脚本. 代码不报错之后,运行录制好的Java脚本,启动了firefox之后,不执行test方法,报错Nul ...

  2. .xxx.sh脚本无法启动,原来都是特殊字符搞的鬼?

    今天遇到个趣的问题,linux上springboot启动,连接达梦数据库报错. 解决思路: 1)是不是数据库本身有问题,客户端登录没问题. 2)排查是不是war包问题,本地连接数据库,没问题. 3)是 ...

  3. 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路

    layout: post title: 2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路 key: 20180517 tags: OAA flow chart se ...

  4. SpringBoot项目部署到服务器上,tomcat不启动该项目

    今天lz把项目重新传到服务器上后,重启tomcat遇到个问题,就是这个tomcat怎么都不启动这个项目,别的项目都没事,一番查找后发现问题所在. 我们先建个SpringBoot工程,重现一下问题: 写 ...

  5. logstash5生成init脚本后台启动

    默认情况使用rpm包安装完logstash之后没有启动脚本,这一点我觉得算是开发不够彻底.官网给了一个脚本,需要根据不同的系统版本生成对应的启动脚本,而且官网没有给明使用方法,对于新用户来说算是个坑, ...

  6. 【Windows】Python脚本随机启动

    Python脚本的管理在linux系统上市非常方便的,在windows则不是很方面.但是由于之前对于Windows这块的内容不是很了解,其实计划任务也是不错的,但和linux相比起来还是欠缺了那么点. ...

  7. .net 程序通过 crontab 无法启动,手动执行脚本可以启动

    一.问题描述 .net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务. 把脚本放到 crontab 计划任务上,可以把服务 PID kill 掉,但无法 ...

  8. SpringBoot(十):读取application.yml下配置参数信息,java -jar启动时项目修改参数

    读取application.yml下配置参数信息 在application.yml文件内容 my: remote-address: 192.168.1.1 yarn: weburl: http://1 ...

  9. 使用Yeoman快速启动AngularJS项目开发

    本博客停止更新,请访问新个人博客:owenchen.net 前言 博客迁移到了BAE上,http://owenchen.net/,以后的文章会首发在自己的博客上,随后在博客园发布. 很久没有写文章了, ...

  10. springboot之swagger快速启动

    springboot之swagger快速启动 简介 介绍 可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调. 没有接触的小伙伴可以参考官网文章进行了解下demo页面. ...

随机推荐

  1. Win 10 系统下研华采集卡Advantech Navi SDK虚拟demo设备安装方法

    研华的DAQNavi是其采集卡设备的.net编程SDK,安装了其通讯工具Navigator后,可以添加虚拟采集卡 demo device. 在Win10上,执行添加操作时,可能会出现添加失败,这是由于 ...

  2. shell判断进程是否存在

    #!/bin/bash #进入rest所有目录,后续在此目录执行动作 cd /data/www/vhosts/go/ #rest的进程数,由于脚本名称为restart_rest.sh,所以排除了对re ...

  3. mysql函数取出单个字段重新组成一维数组

    array_column():

  4. 用servlet进行用户名和密码校验

    用servlet进行用户名和密码校验 先来看看效果-- 这里为了方便查看,密码框并没有使用password输入框,而是使用了text框 总体来说思路还是比较简单 1.先来个form,配置好action ...

  5. Java中超大文件读写

    如果文件过大不能一次加载,就可以利用缓冲区: File file = new File(filepath); BufferedInputStream fis = new BufferedInputSt ...

  6. windows许可证即将过期

    win+R 输入 slmgr.vbs -xpr 查看日期 激活工具地址: 链接: https://pan.baidu.com/s/1S5nealQM1bytPYV6CYbgyg 提取码: sbmu 1 ...

  7. 感动到哭的SBT下载

    在centos上搭建spark开发环境.使用IntelliJ IDEA做scala开发,需要配置SBT.一直卡在从maven上下载jar包的过程中,还几次都下失败了.试过vpn也没有用. 还好偶然看到 ...

  8. 自我介绍&软工实践博客点评

    想想既然写了点评博客,那就顺便向同学们介绍下自己吧. 我是16届计科实验班的,水了两件小黄衫,于是就来当助教了_(:_」∠)_ 实话说身为同届生来当助教,我心里还是有点虚的,而且我还是计科的..感觉软 ...

  9. 修改 bug 总结

    对于 elementui table 组件的排序 要求对每列数据进行排序 数据是 金额之类 数字的没问题 但是 针对 标题中有数字,字母,文字的时候 会排序错误 :sort-method=" ...

  10. BZOJ2681 : 玩游戏2

    首先若存在多个连通块,那么答案显然是$+\infty$. 否则以$m$为根,每棵子树的根节点都最多只能放一个金币,且这些子树之间互不干扰. 对于一棵父亲为$m$的子树,最优方案下一定可以将子树剖分成若 ...