马府强
2 years ago
6 changed files with 351 additions and 0 deletions
@ -0,0 +1,54 @@ |
|||
HELP.md |
|||
target/ |
|||
!.mvn/wrapper/maven-wrapper.jar |
|||
!**/src/main/**/target/ |
|||
!**/src/test/**/target/ |
|||
|
|||
### STS ### |
|||
.apt_generated |
|||
.classpath |
|||
.factorypath |
|||
.project |
|||
.settings |
|||
.springBeans |
|||
.sts4-cache |
|||
|
|||
### IntelliJ IDEA ### |
|||
.idea |
|||
*.iws |
|||
*.iml |
|||
*.ipr |
|||
|
|||
### NetBeans ### |
|||
/nbproject/private/ |
|||
/nbbuild/ |
|||
/dist/ |
|||
/nbdist/ |
|||
/.nb-gradle/ |
|||
build/ |
|||
!**/src/main/**/build/ |
|||
!**/src/test/**/build/ |
|||
|
|||
### VS Code ### |
|||
.vscode/ |
|||
|
|||
# Log file |
|||
*.log |
|||
/logs* |
|||
|
|||
# BlueJ files |
|||
*.ctxt |
|||
|
|||
# Mobile Tools for Java (J2ME) |
|||
.mtj.tmp/ |
|||
|
|||
# Package Files # |
|||
*.jar |
|||
*.war |
|||
*.ear |
|||
*.zip |
|||
*.tar.gz |
|||
*.rar |
|||
*.cmd |
|||
|
|||
/data |
@ -0,0 +1,86 @@ |
|||
## xxljob-autoregister-spring-boot-starter |
|||
|
|||
********************************** |
|||
|
|||
自动注册xxl-job执行器以及任务 |
|||
|
|||
## 1、打包 |
|||
|
|||
``` |
|||
mvn clean install |
|||
``` |
|||
|
|||
## 2、项目中引入 |
|||
|
|||
```xml |
|||
<dependency> |
|||
<groupId>com.cn.woniu</groupId> |
|||
<artifactId>xxljob-autoregister-spring-boot-starter</artifactId> |
|||
<version>0.0.1</version> |
|||
</dependency> |
|||
``` |
|||
|
|||
## 3、配置 |
|||
|
|||
springboot项目配置文件application.properties: |
|||
|
|||
```properties |
|||
server.port=8082 |
|||
|
|||
# 原生xxl-job配置 |
|||
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin |
|||
xxl.job.accessToken=default_token |
|||
xxl.job.executor.appname=xxl-job-executor-test |
|||
xxl.job.executor.address= |
|||
xxl.job.executor.ip=127.0.0.1 |
|||
xxl.job.executor.port=9999 |
|||
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler |
|||
xxl.job.executor.logretentiondays=30 |
|||
|
|||
# 新增配置项,必须项 |
|||
# admin用户名 |
|||
xxl.job.admin.username=admin |
|||
# admin 密码 |
|||
xxl.job.admin.password=123456 |
|||
# 执行器名称 |
|||
xxl.job.executor.title=Exe-Titl |
|||
|
|||
# 新增配置项,可选项 |
|||
# 执行器地址类型:0=自动注册、1=手动录入,默认为0 |
|||
xxl.job.executor.addressType=1 |
|||
# 在上面为1的情况下,手动录入执行器地址列表,多地址逗号分隔 |
|||
xxl.job.executor.addressList=http://127.0.0.1:9999 |
|||
``` |
|||
|
|||
`XxlJobSpringExecutor`参数配置与之前相同 |
|||
|
|||
## 4、添加注解 |
|||
需要自动注册的方法添加注解`@XxlRegister`,不加则不会自动注册 |
|||
|
|||
```java |
|||
@Service |
|||
public class TestService { |
|||
|
|||
@XxlJob(value = "testJob") |
|||
@XxlRegister(cron = "0 0 0 * * ? *", |
|||
author = "woniu", |
|||
jobDesc = "测试job") |
|||
public void testJob(){ |
|||
System.out.println("#公众号:程序员蜗牛g"); |
|||
} |
|||
|
|||
|
|||
@XxlJob(value = "testJob222") |
|||
@XxlRegister(cron = "59 1-2 0 * * ?", |
|||
triggerStatus = 1) |
|||
public void testJob2(){ |
|||
System.out.println("#作者:woniu"); |
|||
} |
|||
|
|||
@XxlJob(value = "testJob444") |
|||
@XxlRegister(cron = "59 59 23 * * ?") |
|||
public void testJob4(){ |
|||
System.out.println("hello xxl job"); |
|||
} |
|||
} |
|||
``` |
@ -0,0 +1,96 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
|
|||
<groupId>com.cn.woniu</groupId> |
|||
<artifactId>xxljob-autoregister-spring-boot-starter</artifactId> |
|||
<version>0.0.1</version> |
|||
|
|||
<properties> |
|||
<java.version>8</java.version> |
|||
<xxl-job.version>2.3.0</xxl-job.version> |
|||
<spring-boot.version>2.6.7</spring-boot.version> |
|||
<hutool.version>5.4.2</hutool.version> |
|||
</properties> |
|||
|
|||
<dependencyManagement> |
|||
<dependencies> |
|||
<dependency> |
|||
<!-- Import dependency management from Spring Boot (依赖管理:继承一些默认的依赖,工程需要依赖的jar包的管理,申明其他dependency的时候就不需要version) --> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-parent</artifactId> |
|||
<version>${spring-boot.version}</version> |
|||
<type>pom</type> |
|||
<scope>import</scope> |
|||
</dependency> |
|||
</dependencies> |
|||
</dependencyManagement> |
|||
|
|||
<dependencies> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-autoconfigure</artifactId> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>org.caffinitas.ohc</groupId> |
|||
<artifactId>ohc-core</artifactId> |
|||
<version>0.7.4</version> |
|||
</dependency> |
|||
|
|||
|
|||
|
|||
<!-- xxl-job-core --> |
|||
<dependency> |
|||
<groupId>com.xuxueli</groupId> |
|||
<artifactId>xxl-job-core</artifactId> |
|||
<version>${xxl-job.version}</version> |
|||
</dependency> |
|||
|
|||
<dependency> |
|||
<groupId>cn.hutool</groupId> |
|||
<artifactId>hutool-all</artifactId> |
|||
<version>${hutool.version}</version> |
|||
</dependency> |
|||
</dependencies> |
|||
|
|||
<build> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>org.apache.maven.plugins</groupId> |
|||
<artifactId>maven-compiler-plugin</artifactId> |
|||
<configuration> |
|||
<source>${java.version}</source> |
|||
<target>${java.version}</target> |
|||
<encoding>UTF-8</encoding> |
|||
</configuration> |
|||
</plugin> |
|||
|
|||
<!-- 要将源码放上去,需要加入这个插件 --> |
|||
<plugin> |
|||
<artifactId>maven-source-plugin</artifactId> |
|||
<version>3.0.1</version> |
|||
<configuration> |
|||
<attach>true</attach> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<phase>compile</phase> |
|||
<goals> |
|||
<goal>jar</goal> |
|||
</goals> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
|
|||
</plugins> |
|||
</build> |
|||
|
|||
</project> |
@ -0,0 +1,30 @@ |
|||
package com.xxl.job.plus.executor.core; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
/** |
|||
* -Xms100m -Xmx100m |
|||
*/ |
|||
public class HashMapCacheExample { |
|||
private static HashMap<String, String> HASHMAP = new HashMap<>(); |
|||
|
|||
public static void main(String[] args) throws InterruptedException { |
|||
hashMapOOM(); |
|||
} |
|||
|
|||
private static void hashMapOOM() throws InterruptedException { |
|||
//准备时间,方便观察
|
|||
TimeUnit.SECONDS.sleep(10); |
|||
int num = 0; |
|||
while (true) { |
|||
//往 map 中存放 1M 大小的字符串
|
|||
String big = new String(new byte[1024 * 1024]); |
|||
HASHMAP.put(num + "", big); |
|||
num++; |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
} |
@ -0,0 +1,83 @@ |
|||
package com.xxl.job.plus.executor.core; |
|||
|
|||
|
|||
import com.google.common.base.Charsets; |
|||
import org.caffinitas.ohc.CacheSerializer; |
|||
import org.caffinitas.ohc.OHCache; |
|||
import org.caffinitas.ohc.OHCacheBuilder; |
|||
|
|||
import java.nio.ByteBuffer; |
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
/** |
|||
* 基于堆外内存的缓存框架 OHC |
|||
* 物理内存=堆外内存+堆内内存。 |
|||
* 堆外内存不受堆内内存大小的限制,只受服务器物理内存的大小限制 |
|||
*/ |
|||
public class OhcDemo { |
|||
public static void main(String[] args) throws InterruptedException { |
|||
//准备时间,方便观察
|
|||
TimeUnit.SECONDS.sleep(10); |
|||
OHCache ohCache = OHCacheBuilder.<String, String>newBuilder() |
|||
.keySerializer(OhcDemo.stringSerializer) |
|||
.valueSerializer(OhcDemo.stringSerializer) |
|||
.capacity(1024L * 1024 * 1024 * 2) |
|||
.build(); |
|||
int num = 0; |
|||
while (true) { |
|||
String big = new String(new byte[1024 * 1024]); |
|||
ohCache.put(num + "", big); |
|||
num++; |
|||
} |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
public static final CacheSerializer<String> stringSerializer = new CacheSerializer<String>() { |
|||
public void serialize(String s, ByteBuffer buf) { |
|||
byte[] bytes = s.getBytes(Charsets.UTF_8); |
|||
buf.put((byte) ((bytes.length >>> 8) & 0xFF)); |
|||
buf.put((byte) ((bytes.length >>> 0) & 0xFF)); |
|||
buf.put(bytes); |
|||
} |
|||
|
|||
public String deserialize(ByteBuffer buf) { |
|||
int length = (((buf.get() & 0xff) << 8) + ((buf.get() & 0xff) << 0)); |
|||
byte[] bytes = new byte[length]; |
|||
buf.get(bytes); |
|||
return new String(bytes, Charsets.UTF_8); |
|||
} |
|||
|
|||
public int serializedSize(String s) { |
|||
byte[] bytes = s.getBytes(Charsets.UTF_8); |
|||
// 设置字符串长度限制,2^16 = 65536
|
|||
// if (bytes.length > 65535){
|
|||
// throw new RuntimeException("encoded string too long: " + bytes.length + " bytes");
|
|||
// }
|
|||
return bytes.length + 2; |
|||
} |
|||
}; |
|||
|
|||
static int writeUTFLen(String str) { |
|||
int strlen = str.length(); |
|||
int utflen = 0; |
|||
int c; |
|||
|
|||
for (int i = 0; i < strlen; i++) { |
|||
c = str.charAt(i); |
|||
if ((c >= 0x0001) && (c <= 0x007F)) |
|||
utflen++; |
|||
else if (c > 0x07FF) |
|||
utflen += 3; |
|||
else |
|||
utflen += 2; |
|||
} |
|||
|
|||
if (utflen > 65535) |
|||
throw new RuntimeException("encoded string too long: " + utflen + " bytes"); |
|||
|
|||
return utflen + 2; |
|||
} |
|||
|
|||
} |
@ -0,0 +1,2 @@ |
|||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ |
|||
com.xxl.job.plus.executor.config.XxlJobPlusConfig |
Loading…
Reference in new issue