35 Commits

Author SHA1 Message Date
bamanker
40a3a12233 fix了k8s devops的配置 2023-11-30 23:25:26 +08:00
bamanker
7a145c40bd fix了k8s devops的配置 2023-11-28 00:55:23 +08:00
bamanker
89efefd7c1 fix了k8s devops的配置 2023-11-28 00:39:56 +08:00
bamanker
c3e0a2cf6e 增加了k8s devops的配置 2023-11-23 15:45:57 +08:00
bamanker
b80bdb6370 增加了k8s devops的配置 2023-11-23 15:38:44 +08:00
bamanker
9f35e58970 Merge remote-tracking branch 'origin/version3-native-localBuild' into version3-native-localBuild 2023-11-23 15:23:59 +08:00
bamanker
e0d0e9701b 增加了k8s devops的配置 2023-11-23 15:23:33 +08:00
bamanker
90c2dc3a05 增加了k8s devops的配置 2023-11-23 15:21:39 +08:00
bamanker
d51ffb35c9 增加了k8s devops的配置 2023-11-23 15:08:12 +08:00
bamanker
eaec895ff0 增加了k8s devops的配置 2023-11-23 15:03:54 +08:00
bamanker
4d660bbff8 增加了k8s devops的配置 2023-11-23 14:55:43 +08:00
bamanker
70f55ef987 增加了k8s devops的配置 2023-11-23 14:54:22 +08:00
bamanker
773a759473 增加了k8s devops的配置 2023-11-23 13:46:49 +08:00
bamanker
ed7ce1279a 增加了k8s devops的配置 2023-11-23 12:59:54 +08:00
bamanker
524f0f63ae 增加了k8s devops的配置 2023-11-23 11:47:21 +08:00
bamanker
a6699e26a7 增加了k8s devops的配置 2023-11-23 11:10:07 +08:00
bamanker
b79710a1fc 添加了GraalVM的原生镜像版本-本地编译版本
-修复了@Resource注入失败导致的程序跑不起来的问题
2023-11-13 15:30:11 +08:00
bamanker
af50397afb 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数2
2023-11-11 21:31:37 +08:00
bamanker
888b0e670f 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数2
2023-11-11 21:24:20 +08:00
bamanker
6067550bd2 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数1
2023-11-11 21:04:18 +08:00
bamanker
e0d5d784f8 添加了GraalVM的原生镜像版本-本地编译版本
-添加了dockerfile中workdir参数
2023-11-11 20:49:55 +08:00
bamanker
5ae844ea33 添加了GraalVM的原生镜像版本-本地编译版本
-修复了若干bug(容器中应用无法打开的问题)
2023-11-11 20:33:14 +08:00
bamanker
6eaa123087 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile中的ENTRYPOINT参数
2023-11-11 18:58:57 +08:00
bamanker
f8c2ea8206 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile3
2023-11-11 18:34:16 +08:00
bamanker
cf10cec717 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile3
2023-11-11 18:14:56 +08:00
bamanker
7513fac8d8 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile2
2023-11-11 18:10:40 +08:00
bamanker
f46c78b9f1 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile2
2023-11-11 18:07:03 +08:00
bamanker
659c8e6f3b 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile1
2023-11-11 17:57:32 +08:00
bamanker
3d6530f148 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile1
2023-11-11 17:52:40 +08:00
bamanker
0c00085e9f 添加了GraalVM的原生镜像版本-本地编译版本
修改dockerfile
2023-11-11 17:38:17 +08:00
bamanker
474b16c662 添加了GraalVM的原生镜像版本-本地编译版本
修改了构建器参数,增加了jfr监控等
2023-11-11 17:23:01 +08:00
bamanker
3a18a6b7a6 添加了GraalVM的原生镜像版本-本地编译版本3 2023-11-11 12:18:05 +08:00
bamanker
9cb5e77bb5 添加了GraalVM的原生镜像版本-本地编译版本2 2023-11-11 11:43:06 +08:00
bamanker
392c50ceb9 添加了GraalVM的原生镜像版本-本地编译版本1 2023-11-11 11:34:36 +08:00
bamanker
38152b7786 添加了GraalVM的原生镜像版本-本地编译版本 2023-11-11 11:27:14 +08:00
10 changed files with 275 additions and 48 deletions

33
.gitignore vendored
View File

@@ -1,33 +0,0 @@
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/

View File

@@ -1,6 +1,6 @@
FROM ubuntu:latest
FROM ubuntu:jammy-20231004
MAINTAINER bamanker
ARG NATIVE_FILE
COPY target/${NATIVE_FILE} /home/dailylove/app
COPY target/dailylove /home/dailylove/app
EXPOSE 13145
ENTRYPOINT ["/home/dailylove/app"]
WORKDIR /home/dailylove/out
ENTRYPOINT /home/dailylove/app -XX:StartFlightRecording='filename=recording.jfr,dumponexit=true,duration=10s'

79
deploy.yaml Normal file
View File

@@ -0,0 +1,79 @@
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: $APP_NAME
version: $TAG
name: $APP_NAME
namespace: dl-proj #一定要写名称空间
spec:
progressDeadlineSeconds: 600
replicas: 1
selector:
matchLabels:
app: $APP_NAME
strategy:
rollingUpdate:
maxSurge: 50%
maxUnavailable: 50%
type: RollingUpdate
template:
metadata:
labels:
app: $APP_NAME
version: $TAG
spec:
imagePullSecrets:
- name: aliyun-docker-hub #提前在项目下配置访问阿里云的账号密码
containers:
- image: $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$TAG
readinessProbe:
httpGet:
path: /test
port: 13145
timeoutSeconds: 10
failureThreshold: 30
periodSeconds: 5
imagePullPolicy: Always
name: app
ports:
- containerPort: 13145
protocol: TCP
resources:
limits:
cpu: 99m
memory: 65Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
env:
- name: TZ
value: "Asia/Shanghai"
dnsPolicy: ClusterFirst
restartPolicy: Always
terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
labels:
app: $APP_NAME
name: $APP_NAME
namespace: dl-proj
spec:
ports:
- name: http
port: 13145
protocol: TCP
targetPort: 13145
selector:
app: $APP_NAME
sessionAffinity: None
type: ClusterIP
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: $APP_NAME # ServiceAccount的名字
namespace: dl-proj # serviceaccount的namespace
labels:
app: $APP_NAME #ServiceAccount的标签

41
pom.xml
View File

@@ -10,9 +10,9 @@
</parent>
<groupId>com.bamanker</groupId>
<artifactId>dailylove</artifactId>
<version>v2.1</version>
<version>v2.3-local</version>
<name>dailyLove</name>
<description>dailylove</description>
<description>dailylove-forK8S</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -22,7 +22,8 @@
<fastjson.version>2.0.25</fastjson.version>
<openfeign.version>4.0.4</openfeign.version>
<hutool.version>5.8.18</hutool.version>
<docker.private.repository>172.17.0.1:10888/my_work</docker.private.repository>
<docker.private.repository>registry.cn-chengdu.aliyuncs.com/bamanker</docker.private.repository>
<!-- <docker.private.repository>172.17.0.1:10888/my_work</docker.private.repository>-->
</properties>
<dependencies>
<dependency>
@@ -68,6 +69,35 @@
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.27</version>
<!--为本机映像程序添加配置,生成的配置文件位于
META-INF/native-image/groupID/artifactID/native-image.properties
也可以手动配置-->
<configuration>
<buildArgs>
<!--开启dashboard-->
<!-- <arg>-H:DashboardDump=dailylove -H:+DashboardAll</arg>-->
<arg->-H:+ReportExceptionStackTraces</arg->
<!--开启JFR-->
<arg>--enable-monitoring=jfr</arg>
<arg>--gc=G1</arg>
<!-- <arg>&#45;&#45;pgo</arg>-->
<arg>-Ob</arg>
<!-- <arg>-march=native</arg>-->
<arg>-H:+BuildReport</arg>
</buildArgs>
<!--启动详细输出-->
<verbose>true</verbose>
<!--配置jvm参数-->
<!-- <jvmArgs>
</jvmArgs>-->
<!--<agent>
<enabled>true</enabled>
<options>
<option>experimental-class-loader-support</option>
</options>
</agent>-->
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
@@ -88,8 +118,8 @@
</execution>
</executions>
<configuration>
<username>bamanker</username>
<password>Fz8803101</password>
<!-- <username>bamanker</username>-->
<!-- <password>Fz8803101</password>-->
<repository>${docker.private.repository}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
@@ -99,5 +129,4 @@
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,138 @@
package com.bamanker.dailylove.config;
import cn.hutool.core.util.ClassUtil;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/**
* 反射将所有项目类扫描加入到服务, 大力出奇迹的操作,感觉不太合适,不过先让服务跑起来
*
* @author bamanker
*/
@Component
public class ClassReflectConfig {
static boolean begin = true;
@Value("${scanclass}")
private Boolean scanclass;
@Autowired
private ThreadPoolTaskExecutor executorService;
@PostConstruct
public void init() {
if (scanclass) {
System.err.println("配置文件下 scanclass 开启了生成反射类");
} else {
System.err.println("配置文件下 scanclass 关闭了生成反射类");
}
synchronized (ClassReflectConfig.class) {
if (begin && scanclass) {
begin = false;
executorService.submit(() -> {
// {
// // 先抓取上一次的文件,生成
// try {
// BufferedReader utf8Reader = ResourceUtil
// .getUtf8Reader("classpath:/META-INF/native-image/reflect-config.json");
// String res = utf8Reader.lines().collect(Collectors.joining());
// List object = ProJsonUtil.toObject(res, List.class);
// for (Object object2 : object) {
// try {
// Map object22 = (Map) object2;
// handlerClass(Class.forName(ProMapUtil.getStr(object22, "name")));
// } catch (Exception e) {
// }
// }
// } catch (Exception e) {
// log.error("生成文件异常", e);
// }
// }
{
// 扫描系统第二级开始的包
String packageName = ClassReflectConfig.class.getPackageName();
String proPackageName = packageName.substring(0,
packageName.indexOf(".", packageName.indexOf(".") + 1));
// 可以在这个地方,添加除了服务以外其他的包,将会加入反射,以供graalvm生成配置
List<String> asList = Arrays.asList(proPackageName);
for (String spn : asList) {
try {
Set<Class<?>> doScan = ClassUtil.scanPackage(spn);
for (Class clazz : doScan) {
handlerClass(clazz);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
// handlerClass(RedisMessageListenerContainer.class);
});
}
}
}
private void handlerClass(Class clazz) {
if (clazz.equals(ClassReflectConfig.class)) {
// 跳过自己,避免形成循环
return;
}
executorService.submit(() -> {
try {
System.err.println("反射注入:" + clazz.getName());
// 生成所有的构造器
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
// 找到无参构造器然后实例化
Constructor declaredConstructor = clazz.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
Object newInstance = declaredConstructor.newInstance();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
try {
// 实例化成功,那么调用一下
method.setAccessible(true);
// graalvm必须需要声明方法
method.invoke(newInstance);
} catch (Throwable e) {
}
}
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
try {
field.setAccessible(true);
field.getType();
String name = field.getName();
field.get(newInstance);
} catch (Throwable e) {
}
}
System.err.println("反射注入完成:" + clazz.getName());
} catch (Throwable e) {
}
});
}
}

View File

@@ -5,7 +5,6 @@ import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
@RefreshScope
public class DailyLoveConfigure {
// public static String Access_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";
// public static String Send_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}";

View File

@@ -8,9 +8,13 @@ import org.springframework.stereotype.Component;
@Component
public class PushTask {
@Autowired
final
PushDailyController pushDailyController;
public PushTask(PushDailyController pushDailyController) {
this.pushDailyController = pushDailyController;
}
//每日 早上7.30,晚上22点 定时推送
@Scheduled(cron = "0 30 7 * * ?")
public void scheduledPushMorning(){

View File

@@ -9,6 +9,7 @@ import com.bamanker.dailylove.service.DataRemoteClient;
import com.bamanker.dailylove.service.WechatRequestClient;
import com.bamanker.dailylove.utils.DataUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -20,12 +21,17 @@ import java.util.Date;
@RestController
public class PushDailyController {
@Resource
final
DataRemoteClient dataRemoteClient;
@Resource
final
WechatRequestClient wechatRequestClient;
public PushDailyController(DataRemoteClient dataRemoteClient, WechatRequestClient wechatRequestClient) {
this.dataRemoteClient = dataRemoteClient;
this.wechatRequestClient = wechatRequestClient;
}
/**
* 推送晚安
*

View File

@@ -4,6 +4,9 @@ server:
spring:
application:
name: dailyLove
cloud:
refresh:
enabled: false
DL:
tianxin-key: 72fbbb9e75e338ea6a240e83972f287c
@@ -50,3 +53,5 @@ tianxin:
logging:
level:
com.bamanker.dailylove.service: debug #指定openfeign日志以什么级别监控哪个接口可多个
scanclass: false

BIN
target/dailylove Executable file

Binary file not shown.