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>
//其他依赖,请根据实际情况引入