重点技术-20180812-JAVA插件式开发-JarsLink使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/namelessfighter/article/details/81608059

JarsLink默认60秒刷新一次

参考:https://github.com/wintermin/JarsLinkDemo

----------------------业务逻辑端----------------------

-----------服务定义-----------

import com.alipay.jarslink.api.Action;

import com.wintermin.jarslink.entity.Index;

public class MyAction implements Action<String, Index>

{

        @Override

        public Index execute(String paraValue)

        {

        return new Index().setName("paraValue:" + paraValue);

        }

        @Override

        public String getActionName()

        {

                return "myAction";

        }

}

-----------返回数据模型定义-----------

import lombok.Data;

import lombok.experimental.Accessors;

@Data

@Accessors(chain = true)

public class ReturnModel

{

        private String name;

}

-----------SpringBean定义-----------

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="myAction" class="com.tony.action.MyAction"/>

</beans>

-----------Maven设置-----------

-------版本设置

        <groupId>包名</groupId>

        <artifactId>服务名称</artifactId>

        <version>版本名称</version>

        <packaging>jar</packaging>

---设置样例

        <groupId>com.tony</groupId>

        <artifactId>AutoJarService</artifactId>

        <version>1.0-SNAPSHOT</version>

        <packaging>jar</packaging>

-------至少依赖

        <dependency>

                <groupId>com.alipay.jarslink</groupId>

                <artifactId>jarslink-api</artifactId>

                <version>1.5.0.20180213</version>

        </dependency>

-------打包设置

<build>

        <plugins>

                <plugin>

                        <groupId>org.apache.maven.plugins</groupId>

                        <artifactId>maven-compiler-plugin</artifactId>

                        <version>2.0.2</version>

                        <configuration>

                                <source>1.8</source>

                                <target>1.8</target>

                                <encoding>UTF-8</encoding>

                        </configuration>

                </plugin>

        </plugins>

</build>

----------------------公共管理平台----------------------

-----------Jar动态模块刷新任务-----------

import com.alipay.jarslink.api.ModuleConfig;

import com.alipay.jarslink.api.impl.AbstractModuleRefreshScheduler;

import com.google.common.collect.ImmutableList;

import cn.hutool.core.io.file.FileReader;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

public class ModuleRefreshSchedulerImpl extends AbstractModuleRefreshScheduler

{

        private static final String PATH = "Jar文件所在路径";

        @Override

        public List<ModuleConfig> queryModuleConfigs()

        {

                //JarVersion.config文件内容:一行一个模块“模块名称:版本”,如“AutoJarService=1.4-SNAPSHOT”

                FileReader fileReader = new FileReader(PATH + "JarVersion.config");

                List<String> versionLines = fileReader.readLines();

                List<ModuleConfig> moduleConfigList = new ArrayList<ModuleConfig>();

                if(versionLines.size() > 0)

                {

                        for(String versionLine:versionLines)

                        {

                                String[] versionInfo = versionLine.split("=");

                                String serviceName = versionInfo[0];

                                String versionName = versionInfo[1];

                                ModuleConfig moduleConfig = null;

                                try

                                {

                                        URL demoModule = new URL("file", "", -1, PATH + serviceName + "-" + versionName + ".jar");

                                        moduleConfig = new ModuleConfig();

                                        moduleConfig.setName(serviceName);

                                       moduleConfig.setEnabled(true);

                                        moduleConfig.setVersion(versionName);

                                        moduleConfig.setModuleUrl(ImmutableList.of(demoModule));

                                }

                                catch (MalformedURLException e)

                                {

                                        e.printStackTrace();

                               }

                                if(moduleConfig != null)

                               {

                                       moduleConfigList.add(moduleConfig);

                                }

                        }

               }

               return moduleConfigList;

        }

}

-----------模块配置-----------

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import com.alipay.jarslink.api.impl.ModuleLoaderImpl;

import com.alipay.jarslink.api.impl.ModuleManagerImpl;

@Configuration

public class ModuleConfiguration

{

        @Bean

        public ModuleLoaderImpl moduleLoader()

        {

                        return new ModuleLoaderImpl();

        }

        @Bean

        public ModuleManagerImpl moduleManager()

        {

               return new ModuleManagerImpl();

        }

        @Bean

        public ModuleRefreshSchedulerImpl moduleRefreshScheduler()

        {

                ModuleRefreshSchedulerImpl moduleRefreshScheduler = new ModuleRefreshSchedulerImpl();

                moduleRefreshScheduler.setModuleLoader(moduleLoader());

                moduleRefreshScheduler.setModuleManager(moduleManager());

                return moduleRefreshScheduler;

        }

}

-----------模块路由与调用-----------

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;

import com.alipay.jarslink.api.Module;

import com.alipay.jarslink.api.ModuleManager;

@RestController

public class IndexController

{

        @Autowired

        private ModuleManager manager;

        @RequestMapping("/")

        public String getServiceName()

        {

                return "默认首页";

        }

        @RequestMapping("/moduleInfo")

        public String getModuleInfo()

        {

                return JSON.toJSONString(manager.getModules());

        }

        @RequestMapping(value = "/jarslink/{module}/{action}/{para}", method = RequestMethod.GET)

        public String getModule(@PathVariable String module, @PathVariable String action, @PathVariable String para)

        {

                Module moduleInstance = manager.find(module);

                if (moduleInstance == null)

                {

                        return "{\"result\":\"fail\",\"info\":\"没有找到\"}";

                }

                Object result = moduleInstance.doAction(action, para);

                return JSON.toJSONString(result);

        }

}

-----------Maven需要引入的包-----------

<dependency>

        <groupId>com.alipay.jarslink</groupId>

        <artifactId>jarslink-api</artifactId>

        <version>1.6.1.20180301</version>

</dependency>

<dependency>

        <groupId>cn.hutool</groupId>

        <artifactId>hutool-all</artifactId>

        <version>4.1.7</version>

</dependency>

//其他依赖,请根据实际情况引入

猜你喜欢

转载自blog.csdn.net/namelessfighter/article/details/81608059