ว่าด้วยความเกลียดแกวของไทยลาว มันเป็นความเกลียดเพราะความเป็นมนุษย์เอามากๆ เพราะอยู่ด้วยกันเลยประทะกัน ด่าอีกฝ่ายว่าสกปรก หรือหัวหมอไรงี้

แต่ความกลัวคนเวียดนามของคนกรุงเทพตอนไทม์ไลน์เดียวกันคือมองอีกฝ่ายเป็นปิศาจ เป็นสายลับ พอมีคนป้ายสี นศ. ตอน 6 ตุลา ว่าเป็นสายลับญวน สังคมเลยอนุญาตให้การเข่นฆ่าอย่างทารุณเกิดขึ้นกลางเมือง

veer66 reshared this.

in reply to rarirurero

อย่าว่าแต่ไทยกับลาวเลยครับ แม้แต่เจ๊กก็เกลียดแกว ตอนเด็กเห็นพ่อค้าแม่ค้าเจ๊กกับลาวต่ากันลั่นตลาดประจำ บางวันลงไม้ลงมือกันด้วย

ปล. แต่อาจารย์ภาษาจีนกลางผมเป็น นศ. เวียดนามนะ พื้นฐานแน่นมาก สอนดีด้วย อุตส่าห์มาสอนภาษาจีนให้เจ๊กพลัดถิ่นอย่างผม เหอๆ

veer66 reshared this.

in reply to thep

@thep ส่วนแม่ที่เกลียดญวน แต่ที่บ้านรับวัฒนธรรมการกินมาเยอะมาก ตอนเด็กๆ วันเสาร์อาทิตย์ แม่คุยกับน้า เฮ็ดเฝอกัน แล้วตั้งหม้อก๋วยเตี๋ยว (สมัยนี้คนกรุงเทพยังไม่กินเฝอตามร้านอาหาร😂)
@thep
in reply to thep

@thep มันคือเฝอเวียดจริงๆ ค่ะ 555 ตอนเด็กๆ อยู่ระยอง เข้าใจว่ารสไม่เหมือนก๋วยเตี๋ยวเนื้อตามร้านเพาาเทำที่บ้าน ไม่มีสูตรที่ถูกต้อง พอมาญี่ปุ่น เพื่อนเวียดนามทำให้กินคือเหมือนเป๊ะเลย

นอกนั้นอาหารยอดฮิตของบ้านคือข้าวเปียก แกงเส้น แต่แม่เกลียดแกวมาก 😂

@thep

เพราะอากาศมันร้อนมาก เลยเกิดสงสัยขึ้นมาว่าเรามโนไปเองหรือเปล่าว่าร่มกันยูวีที่ด้านในสีดำ มันเย็นกว่าร่มแบบอื่น จนกระทั่งวันก่อนใช่ร่มแบบผ้าร่มธรรมดา อิเชี่ย ร้อนเหมือนไม่ได้กางร่ม ถือร่มให้เมื่อยไปงั้น

任天堂、初代スイッチを米国で値上げ--トランプ関税の影響か
japan.cnet.com/article/3523629…
#japan_cnet #Nintendo_Switch #ゲーム機 #値上げ

#Tuba v0.10.0 is now available, with many new features and bug fixes!

✨ Highlights:
- New Composer
- Grouped Notifications
- Play media from third-party services in-app with Clapper
- In-app web browser
- Collapse long posts
- Mastodon quotes
- Iceshrimp Drive
- 'Featured' Profile tab
- Local-only posting
- Search History
- Alt text from file metadata
🧵

As always, there are too many changes to list here, if you're more interested, check out the full release changelog:
github.com/GeopJr/Tuba/release…

#tuba

Nach Besuch auf ungarischer Veranstaltung: CDU-Fraktion distanziert sich von Saskia Ludwig apollo-news.net/nach-besuch-au… Die Führung der Unionsfraktion distanziert sich von der CDU-Bundestagsabgeordneten Saskia Ludwig. Ludwig war als Panel-Teilnehmerin bei einer Veranstaltung der konservativen ...
The post Nach Besuch auf ungarischer Veranstaltung: CDU-Fraktion distanziert sich von Saskia Ludwig appeared first on

Banaszak im Sommerinterview: Alles so schön ruhig hier tichyseinblick.de/feuilleton/m… Dass es kein Thriller werden würde, geschenkt. Aber die Art und Weise wie ausschweifend der Grünen-Chef Felix Banaszak seinen Teppich aus Polit-Phrasen unter dem blauen Berliner Himmel ausbreiten durfte, war dann doch erstaunlich. 29 Minuten und 30 Sekunden lang, also anderthalb Minuten länger als Weidel, durfte seine einstudierten Salbader-Salven abschießen,

Wie die Parlamentswahlen in Moldawien manipuliert werden sollen anti-spiegel.ru/2025/wie-die-p… Die pro-westliche Sandu-Regierung in Moldawien hat das ohnehin bettelarme Land seit ihrer Machtübernahme 2021 heruntergewirtschaftet, indem sie die traditionell engen Wirtschaftsbeziehungen zu Russland faktisch gekappt und vor allem, indem sie billige russische Energieträger abgelehnt hat. Zwischenzeitlich steig die Inflation deswegen auf

Bundeszentrale für politische Bildung: Jetzt sind auch die Gamer voll Nazi journalistenwatch.com/2025/08/… In seiner unaufhörlichen Suche nach Rechtsextremisten, sind der Linkstaat und seine Hilfstruppen nun endlich auch in der Gamer-Szene fündig geworden: Die Bundeszentrale für politische Bildung (bpb), die sich längst von ihrem eigentlichen Zweck verabschiedet hat und nur noch eine linke

Trump droht Putin – Sondergesandter reist wohl noch diese Woche nach Moskau exxpress.at/politik/trump-droh… Der Sondergesandte Steve Witkoff soll bereits Mitte der Woche in Russland eintreffen. Trump droht bei ausbleibender Waffenruhe mit harten Sanktionen gegen Putins wichtigste Handelspartner. #news #press

Grüne wollen Klimaschutz in die Landesverfassung aufnehmen apollo-news.net/gruene-wollen-… Die Berliner Grünen streben eine Verankerung des Klimaschutzes als Staatsziel in der Landesverfassung an. Nach der Sommerpause im September will ...
The post Grüne wollen Klimaschutz in die Landesverfassung aufnehmen appeared first on Apollo News. #news #press

Sektenbericht warnt: Kinder in Sommercamps immer öfter Ziel von Missionierung exxpress.at/politik/sektenberi… Trotz neuem Kinderschutz-Gütesiegel fehlen bundesweit einheitliche Vorgaben – die Bundessektenstelle warnt vor Ferienlagern, in denen Kinder missioniert und indoktriniert werden. #news #press

Wieder auf Vorjahresniveau: Verbraucherstimmung sackt ab apollo-news.net/wieder-auf-vor… Die Hoffnungen auf einen nachhaltigen wirtschaftlichen Aufschwung in Deutschland erhalten einen Dämpfer. Das aktuelle Konsumbarometer des Handelsverbands Deutschland (HDE) ist ...
The post Wieder auf Vorjahresniveau: Verbraucherstimmung sackt ab appeared first on Apollo News. #news #press

Die 1N Telecom sorgt in Lüdenscheid offenbar wieder für Probleme. Kunden bekommen laut der Verbraucherzentrale wieder vermehrt Mahnschreiben.#[Verbraucherzentrale #Mahnschreiben #MärkischerKreis #Lüdenscheid #1ntelecom]

Mehrheit der Bürger lehnt Kampfeinsatz ab tichyseinblick.de/daili-es-sen… Die Verteidigungsbereitschaft der deutschen Bevölkerung ist auf einem niedrigen Niveau. Laut einer aktuellen Umfrage würden im Falle eines militärischen Angriffs auf Deutschland nur 16 Prozent der Bürger ohne Zögern zur Waffe greifen, weitere 22 Prozent könnten sich einen Einsatz „wahrscheinlich“ vorstellen. Gleichzeitig wächst die Sorge, dass es in den kommenden Jahren zu einem

Die Organisatoren des Fußball-Testspiels von Borussia Dortmund gegen den OSC Lille ziehen ein positives Fazit. Alle Rahmenbedingungen beim 3:2-Erfolg des BVB am Hemberg hätten gepasst, heißt es.#[Fußball #BorussiaDortmund #Iserlohn #MärkischerKreis #Hembergstadion]

[maven] build container image with Buildpacks


สำหรับวันนี้พอดีสงสัยได้ไปส่อง Repo อื่นๆ แล้วเวลาทำ Container Image มันต้องมี Dockerfile แต่มา Project นึง (เพิ่งได้เข้ามาดู เพราะคนเดิมออกไป) เลยอ๋อ นอกจากทำ Dockerfile แล้วมันสามารถกำหนด Config ในตัว Maven หรือ gradle ได้ด้วยนะ เลยมา Recap ลง Blog ไว้นิดหน่อยทำ Second Brain อิอิ

Table of Contents


Cloud Native Buildpacks


เป็น Project ที่ทาง Pivotal กับ Heroku ทำขึ้นมา เพื่อให้การทำ Container Image สะดวกขึ้น และได้ส่งต่อ CNCF ดูแลต่อ โดยเจ้า Buildpacks มันเข้ามาช่วยลดภาระในการมาจัดการดูแลตัว Dockerfile ของแต่ละ EndPoint ถ้ามีเยอะก็ดูแลลำบาก และยังช่วย Optimize ให้ในตัวด้วย รวมถึงเป็น Container Image ที่เข้ากับมาตรฐาน OCI ด้วย

แล้วที่นี้ใน maven หรือ gradle มันพร้อมใช้อยู่แล้วด้วย โดยใน Blog นี้จะเน้นไปในส่วนของ maven ครับ

Set up the project


ลองสร้าง Project ด้วย Spring Initializr + Spring Web เพิ่มเข้าไปเป็น Dependency และทำ Controller เพื่ออ่าน version ของ app
import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/status")public class ApplicationStatusController { @Value("${api.version}") private String apiVersion; @GetMapping public Status getStatus() { return new Status(this.apiVersion, "running"); } class Status { private String apiVersion; private String status; public Status(String apiVersion, String status) { this.apiVersion = apiVersion; this.status = status; } public String getApiVersion() { return apiVersion; } public String getStatus() { return status; } }}
จากนั้นกำหนด application.properties ใน folder resource เพิ่ม property api.version=1.0 เข้าไป

สร้าง Container Image โดยใช้ buildpacks


ใน maven หรือ gradle รองรับตัว buildpacks อยู่แล้ว สำหรับใน maven ให้ลองหา section build ได้เลยครับ มี Code ปรมาณนี้
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
ปกติแล้ว เราสามารถ Run mvn spring-boot:build-image หรือ mvnw.cmd spring-boot:build-image ได้เลย มันจะไปอ่านในส่วน artifactId ของ maven project

แต่ถ้าเจอ Error failed: Unable to parse name "dsInsuranceApi". Image name must be in the form
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.4.5:build-image (default-cli) on project dsInsuranceApi: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:3.4.5:build-image failed: Unable to parse name "dsInsuranceApi". Image name must be in the form '[domainHost:port/][path/]name', with 'path' and 'name' containing only [a-z0-9][.][_][-] -> [Help 1][ERROR][ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
แสดงว่าชื่อ artifactId เอาไปใช้เป็น container image ไม่ได้ เงื่อนไขต้อง lowercase letters/ numbers / hyphens (-)/ underscores (_) / periods (.) ตรงนี้สามารถใช้ tag configuration > image > name แทนครับ
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><name>ds_insurance/api</name></image></configuration></plugin></plugins></build>
ถ้าลองสั่ง Build อีกรอบ ลองสังเกตุดูมันจะพยายามดึง Base Image มาให้ด้วย
[INFO] Building image 'docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT'[INFO][INFO] > Pulling builder image 'docker.io/paketobuildpacks/builder-jammy-java-tiny:latest' 100%[INFO] > Pulled builder image 'paketobuildpacks/builder-jammy-java-tiny@sha256:cbd65c21bc53832bd81932f9f52e650b275a6aa82fd30702f523907385a4788e' [INFO] > Pulling run image 'docker.io/paketobuildpacks/run-jammy-tiny:latest' for platform 'linux/amd64' 100%
จากนั้น เข้า Process การ Build และทำเก็บข้อมูล รวมถึงการ Inject Config ต่างๆ เข้าไป BP_xx รวมถึงแอบเก็บ Cache ด้วย
INFO] > Running creator[INFO] [creator] ===> ANALYZING[INFO] [creator] Image with name "docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT" not found[INFO] [creator] ===> DETECTING[INFO] [creator] target distro name/version labels not found, reading /etc/os-release file[INFO] [creator] 6 of 26 buildpacks participating[INFO] [creator] paketo-buildpacks/ca-certificates 3.10.1[INFO] [creator] paketo-buildpacks/bellsoft-liberica 11.2.1[INFO] [creator] paketo-buildpacks/syft 2.12.0[INFO] [creator] paketo-buildpacks/executable-jar 6.13.0[INFO] [creator] paketo-buildpacks/dist-zip 5.10.0[INFO] [creator] paketo-buildpacks/spring-boot 5.33.0[INFO] [creator] ===> RESTORING[INFO] [creator] ===> BUILDING[INFO] [creator] target distro name/version labels not found, reading /etc/os-release file[INFO] [creator][INFO] [creator] Paketo Buildpack for CA Certificates 3.10.1[INFO] [creator] github.com/paketo-buildpacks/c… [creator] Build Configuration:[INFO] [creator] $BP_EMBED_CERTS false Embed certificates into the image[INFO] [creator] $BP_ENABLE_RUNTIME_CERT_BINDING true Deprecated: Enable/disable certificate helper layer to add certs at runtime [INFO] [creator] $BP_RUNTIME_CERT_BINDING_DISABLED false Disable certificate helper layer to add certs at runtime[INFO] [creator] Launch Helper: Contributing to layer[INFO] [creator] Creating /layers/paketo-buildpacks_ca-certificates/helper/exec.d/ca-certificates-helper[INFO] [creator] [INFO] [creator] Paketo Buildpack for BellSoft Liberica 11.2.1[INFO] [creator] github.com/paketo-buildpacks/b… [creator] Build Configuration:[INFO] [creator] $BP_JVM_JLINK_ARGS --no-man-pages --no-header-files --strip-debug --compress=1 configure custom link arguments (--output must be omitted)[INFO] [creator] $BP_JVM_JLINK_ENABLED false enables running jlink tool to generate custom JRE[INFO] [creator] $BP_JVM_TYPE JRE the JVM type - JDK or JRE[INFO] [creator] $BP_JVM_VERSION 21 the Java version[INFO] [creator] Launch Configuration:[INFO] [creator] $BPL_DEBUG_ENABLED false enables Java remote debugging support[INFO] [creator] $BPL_DEBUG_PORT 8000 configure the remote debugging port[INFO] [creator] $BPL_DEBUG_SUSPEND false configure whether to suspend execution until a debugger has attached[INFO] [creator] $BPL_HEAP_DUMP_PATH write heap dumps on error to this path[INFO] [creator] $BPL_JAVA_NMT_ENABLED true enables Java Native Memory Tracking (NMT)[INFO] [creator] $BPL_JAVA_NMT_LEVEL summary configure level of NMT, summary or detail[INFO] [creator] $BPL_JFR_ARGS configure custom Java Flight Recording (JFR) arguments[INFO] [creator] $BPL_JFR_ENABLED false enables Java Flight Recording (JFR)[INFO] [creator] $BPL_JMX_ENABLED false enables Java Management Extensions (JMX)[INFO] [creator] $BPL_JMX_PORT 5000 configure the JMX port[INFO] [creator] $BPL_JVM_HEAD_ROOM 0 the headroom in memory calculation[INFO] [creator] $BPL_JVM_LOADED_CLASS_COUNT 35% of classes the number of loaded classes in memory calculation[INFO] [creator] $BPL_JVM_THREAD_COUNT 250 the number of threads in memory calculation[INFO] [creator] $JAVA_TOOL_OPTIONS the JVM launch flags[INFO] [creator] Using Java version 21 extracted from MANIFEST.MF[INFO] [creator] BellSoft Liberica JRE 21.0.7: Contributing to layer[INFO] [creator] Downloading from github.com/bell-sw/Liberica/re… [INFO] [creator] Verifying checksum[INFO] [creator] Expanding to /layers/paketo-buildpacks_bellsoft-liberica/jre[INFO] [creator] Adding 146 container CA certificates to JVM truststore[INFO] [creator] Writing env.launch/BPI_APPLICATION_PATH.default[INFO] [creator] Writing env.launch/BPI_JVM_CACERTS.default[INFO] [creator] Writing env.launch/BPI_JVM_CLASS_COUNT.default[INFO] [creator] Writing env.launch/BPI_JVM_SECURITY_PROVIDERS.default[INFO] [creator] Writing env.launch/JAVA_HOME.default[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.append[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.delim[INFO] [creator] Writing env.launch/MALLOC_ARENA_MAX.default[INFO] [creator] Launch Helper: Contributing to layer[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/java-opts[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/jvm-heap[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/link-local-dns[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/memory-calculator[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/security-providers-configurer[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/jmx[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/jfr[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/openssl-certificate-loader[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/security-providers-classpath-9[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/debug-9[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/nmt[INFO] [creator] Java Security Properties: Contributing to layer[INFO] [creator] Writing env.launch/JAVA_SECURITY_PROPERTIES.default[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.append[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.delim[INFO] [creator] [INFO] [creator] Paketo Buildpack for Syft 2.12.0[INFO] [creator] github.com/paketo-buildpacks/s… [creator] Downloading from github.com/anchore/syft/releas… [creator] Verifying checksum[INFO] [creator] Writing env.build/SYFT_CHECK_FOR_APP_UPDATE.default[INFO] [creator][INFO] [creator] Paketo Buildpack for Executable JAR 6.13.0[INFO] [creator] github.com/paketo-buildpacks/e… [creator] Class Path: Contributing to layer[INFO] [creator] Writing env/CLASSPATH.delim[INFO] [creator] Writing env/CLASSPATH.prepend[INFO] [creator] Process types:[INFO] [creator] executable-jar: java org.springframework.boot.loader.launch.WarLauncher (direct)[INFO] [creator] task: java org.springframework.boot.loader.launch.WarLauncher (direct)[INFO] [creator] web: java org.springframework.boot.loader.launch.WarLauncher (direct)[INFO] [creator][INFO] [creator] Paketo Buildpack for Spring Boot 5.33.0[INFO] [creator] github.com/paketo-buildpacks/s… [creator] Build Configuration:[INFO] [creator] $BPL_JVM_CDS_ENABLED false whether to enable CDS optimizations at runtime[INFO] [creator] $BPL_SPRING_AOT_ENABLED false whether to enable Spring AOT at runtime[INFO] [creator] $BP_JVM_CDS_ENABLED false whether to enable CDS & perform JVM training run[INFO] [creator] $BP_SPRING_AOT_ENABLED false whether to enable Spring AOT[INFO] [creator] $BP_SPRING_CLOUD_BINDINGS_DISABLED false whether to contribute Spring Boot cloud bindings support[INFO] [creator] $BP_SPRING_CLOUD_BINDINGS_VERSION 1 default version of Spring Cloud Bindings library to contribute[INFO] [creator] Launch Configuration:[INFO] [creator] $BPL_SPRING_CLOUD_BINDINGS_DISABLED false whether to auto-configure Spring Boot environment properties from bindings [INFO] [creator] $BPL_SPRING_CLOUD_BINDINGS_ENABLED true Deprecated - whether to auto-configure Spring Boot environment properties from bindings[INFO] [creator] Creating slices from layers index[INFO] [creator] dependencies (64.7 MB)[INFO] [creator] spring-boot-loader (459.3 KB)[INFO] [creator] snapshot-dependencies (0.0 B)[INFO] [creator] application (66.6 KB)[INFO] [creator] Spring Cloud Bindings 2.0.4: Contributing to layer[INFO] [creator] Downloading from repo1.maven.org/maven2/org/spr… [creator] Verifying checksum[INFO] [creator] Copying to /layers/paketo-buildpacks_spring-boot/spring-cloud-bindings[INFO] [creator] Web Application Type: Contributing to layer[INFO] [creator] Non-web application detected[INFO] [creator] Writing env.launch/BPL_JVM_THREAD_COUNT.default[INFO] [creator] Launch Helper: Contributing to layer[INFO] [creator] Creating /layers/paketo-buildpacks_spring-boot/helper/exec.d/spring-cloud-bindings[INFO] [creator] 4 application slices[INFO] [creator] Image labels:[INFO] [creator] org.opencontainers.image.title[INFO] [creator] org.opencontainers.image.version[INFO] [creator] org.springframework.boot.version[INFO] [creator] ===> EXPORTING[INFO] [creator] Adding layer 'paketo-buildpacks/ca-certificates:helper'[INFO] [creator] Adding layer 'paketo-buildpacks/bellsoft-liberica:helper'[INFO] [creator] Adding layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'[INFO] [creator] Adding layer 'paketo-buildpacks/bellsoft-liberica:jre'[INFO] [creator] Adding layer 'paketo-buildpacks/executable-jar:classpath'[INFO] [creator] Adding layer 'paketo-buildpacks/spring-boot:helper'[INFO] [creator] Adding layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'[INFO] [creator] Adding layer 'paketo-buildpacks/spring-boot:web-application-type'[INFO] [creator] Adding layer 'buildpacksio/lifecycle:launch.sbom'[INFO] [creator] Added 5/5 app layer(s)[INFO] [creator] Adding layer 'buildpacksio/lifecycle:launcher'[INFO] [creator] Adding layer 'buildpacksio/lifecycle:config'[INFO] [creator] Adding layer 'buildpacksio/lifecycle:process-types'[INFO] [creator] Adding label 'io.buildpacks.lifecycle.metadata'[INFO] [creator] Adding label 'io.buildpacks.build.metadata'[INFO] [creator] Adding label 'io.buildpacks.project.metadata'[INFO] [creator] Adding label 'org.opencontainers.image.title'[INFO] [creator] Adding label 'org.opencontainers.image.version'[INFO] [creator] Adding label 'org.springframework.boot.version'[INFO] [creator] Setting default process type 'web'[INFO] [creator] Saving docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT...[INFO] [creator] *** Images (0fa27a0042c5):[INFO] [creator] docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT[INFO] [creator] Adding cache layer 'paketo-buildpacks/syft:syft'[INFO] [creator] Adding cache layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'[INFO] [creator] Adding cache layer 'buildpacksio/lifecycle:cache.sbom'[INFO] [INFO] Successfully built image 'docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT'[INFO][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 39.951 s[INFO] Finished at: 2025-05-04T15:26:48+07:00
ถ้าลอง docker images จะพบ image ของเรา
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEds-insurance-api 0.0.1-SNAPSHOT 0fa27a0042c5 3 minute ago 314MB
เพียงเท่านี้เราเอา image ไปใช้งานใน docker compose ต่อได้แล้ว อย่างผมใช้วิธีให้มันลบทิ้ง pack และ run compose ขึ้นมาใช้งานครับ
docker compose -f docker/docker-compose.yaml down --remove-orphansdocker rmi best_insurance/api:latest.\mvnw spring-boot:build-image docker compose -f docker/docker-compose.yaml up
ที่เหลือสำหรับการตั้งค่าในเคสอื่นๆ

- Set Specific Java version


กำหนด env > BP_JVM_VERSION ตามตัวอย่าง
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><name>ds_insurance/api</name><env> <BP_JVM_VERSION>17</BP_JVM_VERSION> <JAVA_TOOL_OPTIONS>-XX:+UseZGC</JAVA_TOOL_OPTIONS></env></image></configuration></plugin></plugins></build>

- Configure the JVM


กำหนด param ของ JVM เช่น พวก Memory, Garbage Collector, heap size เป็นต้น กำหนดได้จาก JAVA_TOOL_OPTIONS

  • ปกติทำประมาณนี้


JAVA_TOOL_OPTIONS="-XX:+UseZGC -Xms512m" mvn spring-boot:build-image

  • เติมไว้ใน pom ก็ได้นะ


<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <environment> <JAVA_TOOL_OPTIONS>-XX:+UseZGC -Xms512m</JAVA_TOOL_OPTIONS> </environment> </configuration> </plugin> </plugins></build>
จริงมันกำหนดตอน Run ได้นะ เติม -e JAVA_TOOL_OPTIONS="-XX:+UseZGC -Xms512m" หรือ จะลองแปลงเป็น env ใน deployment ของ k8s ก็ได้นะ
...env: - name: JAVA_TOOL_OPTIONS value: "-XX:+UseZGC -Xms512m"...

- Select Builder เพื่อลดขนาด image


มันมีหลายเจ้า หรือ จะ Custom ได้ เช่น Alpaquita Buildpacks based on Liberica JDK (มันเป็น Image เค้าแนะนำว่าสำหรับ Spring ก็ลองได้ตามนี้
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <builder>bellsoft/buildpacks.builder:musl</builder> </image> </configuration> </plugin> </plugins></build>

- ถ้าจะใช้ AOT / CDS เปิด option ตามนี้ครับ


  • CDS-Class Data Sharing
  • AOT-Ahead-of-time


<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <env> <BP_SPRING_AOT_ENABLED>true</BP_SPRING_AOT_ENABLED> <BP_JVM_CDS_ENABLED>true</BP_JVM_CDS_ENABLED> </env> </image> </configuration> <executions> <execution> <goals> <goal>process-aot</goal> </goals> </execution> </executions> </plugin>

จริงๆ แล้วตัว Build Packs รองรับได้ภาษา Go / dotnet / Node ก็มีนะ ลองดูเพิ่มได้ที่ https://paketo.io/docs/


Reference


#Spring #Java #SpringBoot #Container

[maven] build container image with Buildpacks

สำหรับวันนี้พอดีสงสัยได้ไปส่อง Repo อื่นๆ แล้วเวลาทำ Container Image มันต้องมี Dockerfile แต่มา Project นึง (เพิ่งได้เข้ามาดู เพราะคนเดิมออกไป) เลยอ๋อ นอกจากทำ Dockerfile แล้วมันสามารถกำหนด Config ในตัว Maven หรือ gradle ได้ด้วยนะ เลยมา Recap ลง Blog ไว้นิดหน่อยทำ Second Brain อิอิ Cloud Native Buildpacks Set up the project สร้าง Container Image โดยใช้ buildpacks - Set Specific Java version - Configure the JVM - Select…

naiwaen.debuggingsoft.com/2025…


[maven] build container image with Buildpacks


สำหรับวันนี้พอดีสงสัยได้ไปส่อง Repo อื่นๆ แล้วเวลาทำ Container Image มันต้องมี Dockerfile แต่มา Project นึง (เพิ่งได้เข้ามาดู เพราะคนเดิมออกไป) เลยอ๋อ นอกจากทำ Dockerfile แล้วมันสามารถกำหนด Config ในตัว Maven หรือ gradle ได้ด้วยนะ เลยมา Recap ลง Blog ไว้นิดหน่อยทำ Second Brain อิอิ

Table of Contents


Cloud Native Buildpacks


เป็น Project ที่ทาง Pivotal กับ Heroku ทำขึ้นมา เพื่อให้การทำ Container Image สะดวกขึ้น และได้ส่งต่อ CNCF ดูแลต่อ โดยเจ้า Buildpacks มันเข้ามาช่วยลดภาระในการมาจัดการดูแลตัว Dockerfile ของแต่ละ EndPoint ถ้ามีเยอะก็ดูแลลำบาก และยังช่วย Optimize ให้ในตัวด้วย รวมถึงเป็น Container Image ที่เข้ากับมาตรฐาน OCI ด้วย

แล้วที่นี้ใน maven หรือ gradle มันพร้อมใช้อยู่แล้วด้วย โดยใน Blog นี้จะเน้นไปในส่วนของ maven ครับ

Set up the project


ลองสร้าง Project ด้วย Spring Initializr + Spring Web เพิ่มเข้าไปเป็น Dependency และทำ Controller เพื่ออ่าน version ของ app
import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/status")public class ApplicationStatusController { @Value("${api.version}") private String apiVersion; @GetMapping public Status getStatus() { return new Status(this.apiVersion, "running"); } class Status { private String apiVersion; private String status; public Status(String apiVersion, String status) { this.apiVersion = apiVersion; this.status = status; } public String getApiVersion() { return apiVersion; } public String getStatus() { return status; } }}
จากนั้นกำหนด application.properties ใน folder resource เพิ่ม property api.version=1.0 เข้าไป

สร้าง Container Image โดยใช้ buildpacks


ใน maven หรือ gradle รองรับตัว buildpacks อยู่แล้ว สำหรับใน maven ให้ลองหา section build ได้เลยครับ มี Code ปรมาณนี้
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
ปกติแล้ว เราสามารถ Run mvn spring-boot:build-image หรือ mvnw.cmd spring-boot:build-image ได้เลย มันจะไปอ่านในส่วน artifactId ของ maven project

แต่ถ้าเจอ Error failed: Unable to parse name "dsInsuranceApi". Image name must be in the form
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:3.4.5:build-image (default-cli) on project dsInsuranceApi: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:3.4.5:build-image failed: Unable to parse name "dsInsuranceApi". Image name must be in the form '[domainHost:port/][path/]name', with 'path' and 'name' containing only [a-z0-9][.][_][-] -> [Help 1][ERROR][ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
แสดงว่าชื่อ artifactId เอาไปใช้เป็น container image ไม่ได้ เงื่อนไขต้อง lowercase letters/ numbers / hyphens (-)/ underscores (_) / periods (.) ตรงนี้สามารถใช้ tag configuration > image > name แทนครับ
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><name>ds_insurance/api</name></image></configuration></plugin></plugins></build>
ถ้าลองสั่ง Build อีกรอบ ลองสังเกตุดูมันจะพยายามดึง Base Image มาให้ด้วย
[INFO] Building image 'docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT'[INFO][INFO] > Pulling builder image 'docker.io/paketobuildpacks/builder-jammy-java-tiny:latest' 100%[INFO] > Pulled builder image 'paketobuildpacks/builder-jammy-java-tiny@sha256:cbd65c21bc53832bd81932f9f52e650b275a6aa82fd30702f523907385a4788e' [INFO] > Pulling run image 'docker.io/paketobuildpacks/run-jammy-tiny:latest' for platform 'linux/amd64' 100%
จากนั้น เข้า Process การ Build และทำเก็บข้อมูล รวมถึงการ Inject Config ต่างๆ เข้าไป BP_xx รวมถึงแอบเก็บ Cache ด้วย
INFO] > Running creator[INFO] [creator] ===> ANALYZING[INFO] [creator] Image with name "docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT" not found[INFO] [creator] ===> DETECTING[INFO] [creator] target distro name/version labels not found, reading /etc/os-release file[INFO] [creator] 6 of 26 buildpacks participating[INFO] [creator] paketo-buildpacks/ca-certificates 3.10.1[INFO] [creator] paketo-buildpacks/bellsoft-liberica 11.2.1[INFO] [creator] paketo-buildpacks/syft 2.12.0[INFO] [creator] paketo-buildpacks/executable-jar 6.13.0[INFO] [creator] paketo-buildpacks/dist-zip 5.10.0[INFO] [creator] paketo-buildpacks/spring-boot 5.33.0[INFO] [creator] ===> RESTORING[INFO] [creator] ===> BUILDING[INFO] [creator] target distro name/version labels not found, reading /etc/os-release file[INFO] [creator][INFO] [creator] Paketo Buildpack for CA Certificates 3.10.1[INFO] [creator] github.com/paketo-buildpacks/c… [creator] Build Configuration:[INFO] [creator] $BP_EMBED_CERTS false Embed certificates into the image[INFO] [creator] $BP_ENABLE_RUNTIME_CERT_BINDING true Deprecated: Enable/disable certificate helper layer to add certs at runtime [INFO] [creator] $BP_RUNTIME_CERT_BINDING_DISABLED false Disable certificate helper layer to add certs at runtime[INFO] [creator] Launch Helper: Contributing to layer[INFO] [creator] Creating /layers/paketo-buildpacks_ca-certificates/helper/exec.d/ca-certificates-helper[INFO] [creator] [INFO] [creator] Paketo Buildpack for BellSoft Liberica 11.2.1[INFO] [creator] github.com/paketo-buildpacks/b… [creator] Build Configuration:[INFO] [creator] $BP_JVM_JLINK_ARGS --no-man-pages --no-header-files --strip-debug --compress=1 configure custom link arguments (--output must be omitted)[INFO] [creator] $BP_JVM_JLINK_ENABLED false enables running jlink tool to generate custom JRE[INFO] [creator] $BP_JVM_TYPE JRE the JVM type - JDK or JRE[INFO] [creator] $BP_JVM_VERSION 21 the Java version[INFO] [creator] Launch Configuration:[INFO] [creator] $BPL_DEBUG_ENABLED false enables Java remote debugging support[INFO] [creator] $BPL_DEBUG_PORT 8000 configure the remote debugging port[INFO] [creator] $BPL_DEBUG_SUSPEND false configure whether to suspend execution until a debugger has attached[INFO] [creator] $BPL_HEAP_DUMP_PATH write heap dumps on error to this path[INFO] [creator] $BPL_JAVA_NMT_ENABLED true enables Java Native Memory Tracking (NMT)[INFO] [creator] $BPL_JAVA_NMT_LEVEL summary configure level of NMT, summary or detail[INFO] [creator] $BPL_JFR_ARGS configure custom Java Flight Recording (JFR) arguments[INFO] [creator] $BPL_JFR_ENABLED false enables Java Flight Recording (JFR)[INFO] [creator] $BPL_JMX_ENABLED false enables Java Management Extensions (JMX)[INFO] [creator] $BPL_JMX_PORT 5000 configure the JMX port[INFO] [creator] $BPL_JVM_HEAD_ROOM 0 the headroom in memory calculation[INFO] [creator] $BPL_JVM_LOADED_CLASS_COUNT 35% of classes the number of loaded classes in memory calculation[INFO] [creator] $BPL_JVM_THREAD_COUNT 250 the number of threads in memory calculation[INFO] [creator] $JAVA_TOOL_OPTIONS the JVM launch flags[INFO] [creator] Using Java version 21 extracted from MANIFEST.MF[INFO] [creator] BellSoft Liberica JRE 21.0.7: Contributing to layer[INFO] [creator] Downloading from github.com/bell-sw/Liberica/re… [INFO] [creator] Verifying checksum[INFO] [creator] Expanding to /layers/paketo-buildpacks_bellsoft-liberica/jre[INFO] [creator] Adding 146 container CA certificates to JVM truststore[INFO] [creator] Writing env.launch/BPI_APPLICATION_PATH.default[INFO] [creator] Writing env.launch/BPI_JVM_CACERTS.default[INFO] [creator] Writing env.launch/BPI_JVM_CLASS_COUNT.default[INFO] [creator] Writing env.launch/BPI_JVM_SECURITY_PROVIDERS.default[INFO] [creator] Writing env.launch/JAVA_HOME.default[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.append[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.delim[INFO] [creator] Writing env.launch/MALLOC_ARENA_MAX.default[INFO] [creator] Launch Helper: Contributing to layer[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/java-opts[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/jvm-heap[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/link-local-dns[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/memory-calculator[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/security-providers-configurer[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/jmx[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/jfr[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/openssl-certificate-loader[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/security-providers-classpath-9[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/debug-9[INFO] [creator] Creating /layers/paketo-buildpacks_bellsoft-liberica/helper/exec.d/nmt[INFO] [creator] Java Security Properties: Contributing to layer[INFO] [creator] Writing env.launch/JAVA_SECURITY_PROPERTIES.default[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.append[INFO] [creator] Writing env.launch/JAVA_TOOL_OPTIONS.delim[INFO] [creator] [INFO] [creator] Paketo Buildpack for Syft 2.12.0[INFO] [creator] github.com/paketo-buildpacks/s… [creator] Downloading from github.com/anchore/syft/releas… [creator] Verifying checksum[INFO] [creator] Writing env.build/SYFT_CHECK_FOR_APP_UPDATE.default[INFO] [creator][INFO] [creator] Paketo Buildpack for Executable JAR 6.13.0[INFO] [creator] github.com/paketo-buildpacks/e… [creator] Class Path: Contributing to layer[INFO] [creator] Writing env/CLASSPATH.delim[INFO] [creator] Writing env/CLASSPATH.prepend[INFO] [creator] Process types:[INFO] [creator] executable-jar: java org.springframework.boot.loader.launch.WarLauncher (direct)[INFO] [creator] task: java org.springframework.boot.loader.launch.WarLauncher (direct)[INFO] [creator] web: java org.springframework.boot.loader.launch.WarLauncher (direct)[INFO] [creator][INFO] [creator] Paketo Buildpack for Spring Boot 5.33.0[INFO] [creator] github.com/paketo-buildpacks/s… [creator] Build Configuration:[INFO] [creator] $BPL_JVM_CDS_ENABLED false whether to enable CDS optimizations at runtime[INFO] [creator] $BPL_SPRING_AOT_ENABLED false whether to enable Spring AOT at runtime[INFO] [creator] $BP_JVM_CDS_ENABLED false whether to enable CDS & perform JVM training run[INFO] [creator] $BP_SPRING_AOT_ENABLED false whether to enable Spring AOT[INFO] [creator] $BP_SPRING_CLOUD_BINDINGS_DISABLED false whether to contribute Spring Boot cloud bindings support[INFO] [creator] $BP_SPRING_CLOUD_BINDINGS_VERSION 1 default version of Spring Cloud Bindings library to contribute[INFO] [creator] Launch Configuration:[INFO] [creator] $BPL_SPRING_CLOUD_BINDINGS_DISABLED false whether to auto-configure Spring Boot environment properties from bindings [INFO] [creator] $BPL_SPRING_CLOUD_BINDINGS_ENABLED true Deprecated - whether to auto-configure Spring Boot environment properties from bindings[INFO] [creator] Creating slices from layers index[INFO] [creator] dependencies (64.7 MB)[INFO] [creator] spring-boot-loader (459.3 KB)[INFO] [creator] snapshot-dependencies (0.0 B)[INFO] [creator] application (66.6 KB)[INFO] [creator] Spring Cloud Bindings 2.0.4: Contributing to layer[INFO] [creator] Downloading from repo1.maven.org/maven2/org/spr… [creator] Verifying checksum[INFO] [creator] Copying to /layers/paketo-buildpacks_spring-boot/spring-cloud-bindings[INFO] [creator] Web Application Type: Contributing to layer[INFO] [creator] Non-web application detected[INFO] [creator] Writing env.launch/BPL_JVM_THREAD_COUNT.default[INFO] [creator] Launch Helper: Contributing to layer[INFO] [creator] Creating /layers/paketo-buildpacks_spring-boot/helper/exec.d/spring-cloud-bindings[INFO] [creator] 4 application slices[INFO] [creator] Image labels:[INFO] [creator] org.opencontainers.image.title[INFO] [creator] org.opencontainers.image.version[INFO] [creator] org.springframework.boot.version[INFO] [creator] ===> EXPORTING[INFO] [creator] Adding layer 'paketo-buildpacks/ca-certificates:helper'[INFO] [creator] Adding layer 'paketo-buildpacks/bellsoft-liberica:helper'[INFO] [creator] Adding layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'[INFO] [creator] Adding layer 'paketo-buildpacks/bellsoft-liberica:jre'[INFO] [creator] Adding layer 'paketo-buildpacks/executable-jar:classpath'[INFO] [creator] Adding layer 'paketo-buildpacks/spring-boot:helper'[INFO] [creator] Adding layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'[INFO] [creator] Adding layer 'paketo-buildpacks/spring-boot:web-application-type'[INFO] [creator] Adding layer 'buildpacksio/lifecycle:launch.sbom'[INFO] [creator] Added 5/5 app layer(s)[INFO] [creator] Adding layer 'buildpacksio/lifecycle:launcher'[INFO] [creator] Adding layer 'buildpacksio/lifecycle:config'[INFO] [creator] Adding layer 'buildpacksio/lifecycle:process-types'[INFO] [creator] Adding label 'io.buildpacks.lifecycle.metadata'[INFO] [creator] Adding label 'io.buildpacks.build.metadata'[INFO] [creator] Adding label 'io.buildpacks.project.metadata'[INFO] [creator] Adding label 'org.opencontainers.image.title'[INFO] [creator] Adding label 'org.opencontainers.image.version'[INFO] [creator] Adding label 'org.springframework.boot.version'[INFO] [creator] Setting default process type 'web'[INFO] [creator] Saving docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT...[INFO] [creator] *** Images (0fa27a0042c5):[INFO] [creator] docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT[INFO] [creator] Adding cache layer 'paketo-buildpacks/syft:syft'[INFO] [creator] Adding cache layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'[INFO] [creator] Adding cache layer 'buildpacksio/lifecycle:cache.sbom'[INFO] [INFO] Successfully built image 'docker.io/library/ds-insurance-api:0.0.1-SNAPSHOT'[INFO][INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 39.951 s[INFO] Finished at: 2025-05-04T15:26:48+07:00
ถ้าลอง docker images จะพบ image ของเรา
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEds-insurance-api 0.0.1-SNAPSHOT 0fa27a0042c5 3 minute ago 314MB
เพียงเท่านี้เราเอา image ไปใช้งานใน docker compose ต่อได้แล้ว อย่างผมใช้วิธีให้มันลบทิ้ง pack และ run compose ขึ้นมาใช้งานครับ
docker compose -f docker/docker-compose.yaml down --remove-orphansdocker rmi best_insurance/api:latest.\mvnw spring-boot:build-image docker compose -f docker/docker-compose.yaml up
ที่เหลือสำหรับการตั้งค่าในเคสอื่นๆ

- Set Specific Java version


กำหนด env > BP_JVM_VERSION ตามตัวอย่าง
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><image><name>ds_insurance/api</name><env> <BP_JVM_VERSION>17</BP_JVM_VERSION> <JAVA_TOOL_OPTIONS>-XX:+UseZGC</JAVA_TOOL_OPTIONS></env></image></configuration></plugin></plugins></build>

- Configure the JVM


กำหนด param ของ JVM เช่น พวก Memory, Garbage Collector, heap size เป็นต้น กำหนดได้จาก JAVA_TOOL_OPTIONS

  • ปกติทำประมาณนี้


JAVA_TOOL_OPTIONS="-XX:+UseZGC -Xms512m" mvn spring-boot:build-image

  • เติมไว้ใน pom ก็ได้นะ


<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <environment> <JAVA_TOOL_OPTIONS>-XX:+UseZGC -Xms512m</JAVA_TOOL_OPTIONS> </environment> </configuration> </plugin> </plugins></build>
จริงมันกำหนดตอน Run ได้นะ เติม -e JAVA_TOOL_OPTIONS="-XX:+UseZGC -Xms512m" หรือ จะลองแปลงเป็น env ใน deployment ของ k8s ก็ได้นะ
...env: - name: JAVA_TOOL_OPTIONS value: "-XX:+UseZGC -Xms512m"...

- Select Builder เพื่อลดขนาด image


มันมีหลายเจ้า หรือ จะ Custom ได้ เช่น Alpaquita Buildpacks based on Liberica JDK (มันเป็น Image เค้าแนะนำว่าสำหรับ Spring ก็ลองได้ตามนี้
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <builder>bellsoft/buildpacks.builder:musl</builder> </image> </configuration> </plugin> </plugins></build>

- ถ้าจะใช้ AOT / CDS เปิด option ตามนี้ครับ


  • CDS-Class Data Sharing
  • AOT-Ahead-of-time


<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <env> <BP_SPRING_AOT_ENABLED>true</BP_SPRING_AOT_ENABLED> <BP_JVM_CDS_ENABLED>true</BP_JVM_CDS_ENABLED> </env> </image> </configuration> <executions> <execution> <goals> <goal>process-aot</goal> </goals> </execution> </executions> </plugin>

จริงๆ แล้วตัว Build Packs รองรับได้ภาษา Go / dotnet / Node ก็มีนะ ลองดูเพิ่มได้ที่ https://paketo.io/docs/


Reference


#Spring #Java #SpringBoot #Container


Hamas Demands Hundreds of Trucks into Gaza - Reports sputnikglobe.com/20250804/hama… The Palestinian movement Hamas is demanding that hundreds of aid trucks be allowed into the Gaza Strip as a precondition for continuing talks with Israel, the Jerusalem Post newspaper reported, citing a source. #news #press

"Helsinki 2.0" kommt nach einem Sieg Russlands de.rt.com/meinung/252102-helsi… Anlässlich des 50. Jubiläums der Helsinki-Schlussakte über Sicherheit und Zusammenarbeit in Europa reden sowohl Russland als auch der Westen von einem potenziellen "Helsinki 2.0". Gemeint sind indes grundlegend verschiedene Dinge, und ein neues Abkommen ist erst nach einem russischen Sieg möglich. #news #press

ไม่เข้าใจว่าทำไม sec ชอบมีความคิดว่าใช้พวก privilege access management tool แล้วจากเดิมที่เข้าเป็นรายคนก็ดันอยากให้เข้าด้วย share account พอเปิด audit logs มาก็เละ

ท่าที่เหมาะสมมันควรเป็น sudo คือ escalate สิทธิ์ตัวเองขึ้นไปเวลาจะทำ privilege แต่ท่านี้ต้องใช้ tooling ที่เหมาะสม vendor pam เดิมๆ ทำไม่ได้แล้วมันก็คงไม่บอกเดี๋ยวคนย้ายหนี

veer66 reshared this.

Prozess nach Terroranschlag in Moskau startet – 19 Angeklagte vor Gericht exxpress.at/news/prozess-nach-… Mehr als ein Jahr nach dem Massaker mit 149 Toten stehen 19 Verdächtige vor Gericht. Der IS bekannte sich zur Tat, Moskau sieht dennoch Kiew in der Verantwortung. #news #press

China Chokes Western Defense Supply with Minerals Stranglehold - Reports sputnikglobe.com/20250804/chin… China is restricting supplies of critical minerals to Western defense firms, delaying production and forcing them to seek alternatives in other markets, the Wall Street Journal reported, citing sources at the companies. #news #press

„Selbstverständlich“: SPD pocht auf höhere Steuern und will Koalitionsvertrag nachverhandlen apollo-news.net/selbstverstaen… Die SPD drängt weiter auf Steuererhöhungen, um die Haushaltslöcher der Koalition auszubessern. Die stellvertretende Fraktionsvorsitzende der Sozialdemokraten im Bundestag, Wiebke ...
The post „Selbstverständlich“: SPD pocht auf höhere Steuern und will Koalitionsvertrag nachverhandlen

Irans Schlachtplan: Shanghaier Organisation für Zusammenarbeit als eurasische Anti-NATO de.rt.com/meinung/251935-irans… Auf dem jüngsten Gipfel der Shanghaier Organisation für Zusammenarbeit hat der Iran wohl den Grundstein für einen eurasischen Sicherheitsblock gelegt – und der Westen ist darob in Panik geraten. Was wäre, wenn der nächste globale Sicherheitspakt nicht in Brüssel oder Washington, sondern

USA: CO2 kein Klimagift − EU: Meinungsklima vergiftet tichyseinblick.de/daili-es-sen… Der Gerichtshof der EU ist kein Gericht wie in den Mitgliedsstaaten. Diese bestellen Richter durch demokratisch Gewählte. Der EU-Gerichtshof beruht auf einem Vertrag zwischen den Funktionären der Staaten. Seine Aufgabe ist es, den Willen der EU-Kommission in den Mitglieds-Staaten durchzusetzen, demokratische Mehrheiten in Einzelstaaten mit anderer Meinung als Brüssel

Kanata สะดวกดี อีกขั้นของการใช้ในคอมที่ทำงาน คือเปลี่ยนปุ่ม grave (`, ~) ให้กดได้สักที ตั้งค่ากดปล่อย => ` กดค้าง => ~ ต้องขอบคุณที่ Kanata support unicode และข้อเสียที่เป็นข้อดีของเราคือมันไม่เริ่มต้นเองเมื่อเปิดเครื่อง ทำให้ session เราไม่ไปกวนคนอื่นที่อยากใช้ปุ่มนั้นเปลี่ยนภาษา

Banaszak im Sommerinterview: Keine „Liebe“ für Deutschland, sondern für Duisburg apollo-news.net/banaszak-im-ar… Im ARD-Sommerinterview hat Grünen-Parteichef Felix Banaszak erklärt, er könne mit dem Begriff „Liebe“ für sein Heimatland nichts anfangen. Zuvor hatte ...
The post Banaszak im Sommerinterview: Keine „Liebe“ für Deutschland, sondern für Duisburg appeared first on Apollo News. #news #press

คนนั้นที่โดนแหกอยู่

Sensitive content

in reply to m

คนนั้นที่โดนแหกอยู่

Sensitive content

in reply to m

แต่พูดก็พูดเหอะ ประเทศไทยมันประเทศแห่งการฟอกขาวศิลปินเกาหลี ไม่ต้องคิดไรมากดูอดีต tvxq คนนั้นที่มี rape allegation + drug scandal สุดท้ายมาไทยยังมีคนซัพ เออเอาเหอะ