用该类,作为引导,来启动对应的jar服务

一.服务类名Boot.java

 

import java.io.File;
 import java.io.FilenameFilter;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;/**
  * java服务启动类
  * @author 
  *
  */
 public class Boot {    //private ClassLoader classLoader= null ;
     
     /**
      * classloadrser 作用是加载lib下所有jar文件,给后续使用
      * @return
      * @throws MalformedURLException
      */
     private ClassLoader createClassLoader() throws Exception{
         ClassLoader cLoader = null;
         String bPath = System.getProperty("user.dir");
         //String bPath2 = new File(System.getProperty("user.dir"), "..").getCanonicalPath();
         System.out.println("当前目录bPath:" + bPath);
        //String bPath3 = new File(System.getProperty("user.dir")).getParent();      //System.out.println("上级目录:" + bPath3);
         File libsDir = new File(bPath, "lib");
         File[] libFiles = libsDir.listFiles(new FilenameFilter() {
             @Override
             public boolean accept(File dir, String name) {
                 if (name.endsWith(".jar"))
                     return true;
                 return false;
             }
         });
         
         int jarCounts = libFiles.length;
         System.out.println("jarCounts:" + jarCounts);
         URL[] url = new URL[jarCounts];
         
         for (int i = 0; i < jarCounts; i++) {
             url[i] = libFiles[i].toURI().toURL();
         }
         
         cLoader = new URLClassLoader(url, Thread
                 .currentThread().getContextClassLoader());
         Thread.currentThread().setContextClassLoader(cLoader);        return cLoader;
     }
     
     //命令输入参数是服务的名字,比如testServer: nohup java -jar Boot.jar TestServer >>testlog.log 2>&1 &
     public static void main(String[] args) {
         try {
             Boot boot = new Boot();
             ClassLoader classLoader = boot.createClassLoader();
             Object serverObject = classLoader.loadClass(args[0]).newInstance();
             //init是testServer.jar中的方法
             Method serverInitMethod = serverObject.getClass().getMethod("start",
                     new Class<?>[] {});
             serverInitMethod.invoke(serverObject, new Object[] {});
         } catch (Exception e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         
     }
 }

并打包成Boot.jar ,打包时候记得设置main类
--------------

二.服务测试类TestServer.java

public class TestServer {
     public void init(){
         System.out.println("init1234");
     }
     
     public void start(){
         System.out.println("start1234");
     }
 }

并打包成TestServer.jar 并拷贝到./lib目录下

 

三.启动命令

nohup java -jar Boot.jar TestServer >>testlog.log 2>&1 &

另外:  

如果用的是Boot.class,命令就是nohup java Boot TestServer >>testlog.log 2>&1 &

 

nuhup java 命令不挂断 ,生产环境用