#!/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. 从头开始学JAVA[Day01]

    1.Java程序的执行过程必须经过先编译,后解释两个步骤 Jvm的统一标准,具体定义了JVM的如下细节: --指令集 --寄存器 --类文件格式 --栈 --垃圾回收堆 --存储区 2.编译Java程 ...

  2. Image Pipeline

    Image Pipeline Scrapy 提供了专门下载文件或者图片的Pipeline,下载图片与文件的原理同抓取网页的原理是一样的,所以他们的下载过程支持多线程与异步,十分的高效 Image Pi ...

  3. Charles使用心得总结

    一.下载/安装/配置 1.1下载并安装Charles. mac版和window版都有,下载可以去Charles官网(http://www.charlesproxy.com/download/),下载下 ...

  4. verilog function功能函数写法

    :] sm2tc; :] din; :] dp; :] dn; :] dout; begin dp = {'b0, din[14:0]}; dn = ~dp + 'b1; dout = (din[] ...

  5. 宏定义define和const的区别

    define和const都可以用来定义常量,define的格式为:#define 标识符 字符串,const在定义常量前面,const类型定以后不能被修改,区别主要有如下几点: 1.编译器处理方式不同 ...

  6. webstorm 2019.1 注册教程

    注册教程:https://blog.csdn.net/hdp134793/article/details/81530472 IntelliJ IDEA 注册码获取网站

  7. hibernate-第一章-基础

    一,简介 hibernate是一个开源的ORM框架,它对我们的jdbc进行了轻量级的对象封装,它将我们的POJO与数据库表简历映射关系,是一个全自动的ORM框架;hibernate可以自动生成SQL语 ...

  8. mysql_config not found和error: command 'gcc' failed with exit status 1

    要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块. 下载地址:https://pypi.python.org/pypi/MySQ ...

  9. 饮冰三年-人工智能-Python-26 Django 学生管理系统

    背景:创建一个简单的学生管理系统,熟悉增删改查操作 一:创建一个Django项目(http://www.cnblogs.com/wupeiqi/articles/6216618.html) 1:创建实 ...

  10. node 和 npm 常用命令

    npm node 简述 快速入门 安装npm和管理npm版本 npm安装 更新npm npm -v npm install npm@latest -g npm install npm@next -g ...