Compare commits
33 Commits
44dada4273
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 37ae0740a9 | |||
| 374fc651df | |||
| 96ca27dd62 | |||
| eee177db3a | |||
| 4eff5b38ea | |||
| 14fb14616c | |||
| 1a656c5160 | |||
| 7b4c7a2153 | |||
| 4aad204326 | |||
| f6e23bdfb7 | |||
| 476e38c637 | |||
| 05d3d3f9a5 | |||
| 7c31f1a685 | |||
| 5d141e856f | |||
| ba44d5731f | |||
| 33b8b18a4d | |||
| dc6d528ee9 | |||
| 87408b0698 | |||
| eac52188c9 | |||
| bb63532da3 | |||
| 2bf7a4db0c | |||
| 66d2348bcc | |||
| d4140f0a60 | |||
| 2b80f036f6 | |||
| 24ef6a5111 | |||
| 2200394782 | |||
| 31e13a9d56 | |||
| 433fc8c059 | |||
| 515ab08a85 | |||
| 01e714d05d | |||
| f274e91edf | |||
| 02c4f5d939 | |||
| 82974e568c |
@@ -0,0 +1,96 @@
|
||||
name: Build & Deploy Full Stack
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
# 🌟 优化:精准监听前端或后端目录的变动(修复了原先不匹配的“前后端/**”)
|
||||
paths:
|
||||
- 前后端/**
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
# 🌟 优化:切换为你刚构建好的纯国内环境镜像,天然享受极速
|
||||
runs-on: ci-base-cn
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: http://192.168.31.185:3002/actions/checkout@v4
|
||||
|
||||
# ===================== 1. 编译阶段 (并行/顺次执行) =====================
|
||||
- name: Build Vue Frontend
|
||||
run: |
|
||||
cd 前端_npm
|
||||
# 🌟 优化:镜像内已固化阿里源,直接无感安装构建
|
||||
npm ci
|
||||
npm run build
|
||||
|
||||
- name: Build Spring Boot Backend
|
||||
run: |
|
||||
cd 后端_java
|
||||
# 🌟 优化:删掉了大段 cat << 'EOF' > settings.xml,一行命令直接起飞
|
||||
mvn package -DskipTests
|
||||
|
||||
# ===================== 2. 统一准备 SSH 秘钥 =====================
|
||||
- name: Setup SSH Key
|
||||
run: |
|
||||
mkdir -p ~/.ssh
|
||||
chmod 700 ~/.ssh
|
||||
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
|
||||
# ===================== 3. 部署前端 =====================
|
||||
- name: Deploy Frontend
|
||||
run: |
|
||||
set -e
|
||||
SERVER_HOST="${{ secrets.SSH_HOST }}"
|
||||
SERVER_USER="${{ secrets.SSH_USER }}"
|
||||
SERVER_PORT="${{ secrets.SSH_PORT }}"
|
||||
TARGET_DIR="${{ secrets.VUE_TARGET_DIR }}"
|
||||
: ${SERVER_HOST:="192.168.31.185"}
|
||||
: ${SERVER_USER:="deploy"}
|
||||
: ${SERVER_PORT:="2222"}
|
||||
: ${TARGET_DIR:="/data/apps/ci-cd/frontend_npm"}
|
||||
|
||||
echo "Deploying frontend to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
|
||||
|
||||
# 确保远程目录存在
|
||||
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" "${SERVER_USER}@${SERVER_HOST}" "mkdir -p ${TARGET_DIR}"
|
||||
|
||||
# 同步前端静态资源(--delete 确保清除服务器旧的废弃代码)
|
||||
rsync -rvz --delete \
|
||||
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
|
||||
前端_npm/dist/ \
|
||||
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
|
||||
|
||||
# ===================== 4. 部署后端 =====================
|
||||
- name: Deploy Backend
|
||||
run: |
|
||||
set -e
|
||||
SERVER_HOST="${{ secrets.SSH_HOST }}"
|
||||
SERVER_USER="${{ secrets.SSH_USER }}"
|
||||
SERVER_PORT="${{ secrets.SSH_PORT }}"
|
||||
TARGET_DIR="${{ secrets.BACKEND_TARGET_DIR }}"
|
||||
: ${SERVER_HOST:="192.168.31.185"}
|
||||
: ${SERVER_USER:="deploy"}
|
||||
: ${SERVER_PORT:="2222"}
|
||||
: ${TARGET_DIR:="/data/apps/ci-cd/backend"}
|
||||
|
||||
echo "Deploying backend to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
|
||||
|
||||
# 🌟 优化:合并连接,一次性创建目录并清理旧 Jar
|
||||
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" "${SERVER_USER}@${SERVER_HOST}" "mkdir -p ${TARGET_DIR} && rm -f ${TARGET_DIR}/app.jar"
|
||||
|
||||
# 传输后端新包
|
||||
rsync -rvz \
|
||||
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
|
||||
后端_java/target/*.jar \
|
||||
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/app.jar"
|
||||
|
||||
# 🌟 优化:调用稳如泰山的 Heredoc (<< 'EOF') 结构重启服务,顶格编写 EOF 消除警告
|
||||
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" "${SERVER_USER}@${SERVER_HOST}" /bin/bash << 'EOF'
|
||||
cd /data/apps/ci-cd/backend || exit 1
|
||||
pkill -u "$USER" -f 'app.jar' 2>/dev/null || true
|
||||
sleep 1
|
||||
nohup java -jar app.jar > app.log 2>&1 < /dev/null &
|
||||
echo "Service restart instruction submitted successfully."
|
||||
@@ -0,0 +1,100 @@
|
||||
name: Build & Deploy Spring Boot
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 后端_java/**
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ci-base
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: http://192.168.31.185:3002/actions/checkout@v4
|
||||
|
||||
- name: Environment Info
|
||||
run: |
|
||||
java -version
|
||||
mvn -version
|
||||
|
||||
- name: Maven Package
|
||||
run: |
|
||||
# 1. 动态注入阿里云镜像,加快依赖下载速度
|
||||
mkdir -p ~/.m2
|
||||
cat << 'EOF' > ~/.m2/settings.xml
|
||||
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
|
||||
<mirrors>
|
||||
<mirror>
|
||||
<id>aliyunmaven</id>
|
||||
<mirrorOf>central</mirrorOf>
|
||||
<name>阿里云公共仓库</name>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
</mirror>
|
||||
</mirrors>
|
||||
</settings>
|
||||
EOF
|
||||
|
||||
# 2. 编译打包
|
||||
cd 后端_java
|
||||
mvn package -DskipTests
|
||||
|
||||
- name: Deploy & Restart
|
||||
run: |
|
||||
set -e
|
||||
|
||||
SERVER_HOST="${{ secrets.SSH_HOST }}"
|
||||
SERVER_USER="${{ secrets.SSH_USER }}"
|
||||
SERVER_PORT="${{ secrets.SSH_PORT }}"
|
||||
TARGET_DIR="${{ secrets.BACKEND_TARGET_DIR }}"
|
||||
|
||||
: ${SERVER_HOST:="192.168.31.185"}
|
||||
: ${SERVER_USER:="deploy"}
|
||||
: ${SERVER_PORT:="2222"}
|
||||
: ${TARGET_DIR:="/data/apps/ci-cd/backend"}
|
||||
|
||||
echo "Deploy to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
|
||||
|
||||
mkdir -p ~/.ssh
|
||||
chmod 700 ~/.ssh
|
||||
|
||||
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
|
||||
# 🌟 优化 1:这一次 SSH 连接,把 mkdir、清理旧包 联合执行
|
||||
echo "Preparing directory and cleaning old files..."
|
||||
ssh -o StrictHostKeyChecking=accept-new \
|
||||
-i ~/.ssh/id_ed25519 \
|
||||
-p "${SERVER_PORT}" \
|
||||
"${SERVER_USER}@${SERVER_HOST}" \
|
||||
"mkdir -p ${TARGET_DIR} && rm -f ${TARGET_DIR}/app.jar"
|
||||
|
||||
# 2. 同步新 Jar 包
|
||||
echo "Syncing jar file via rsync..."
|
||||
rsync -rvz \
|
||||
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
|
||||
后端_java/target/*.jar \
|
||||
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/app.jar"
|
||||
|
||||
# 🌟 优化 2:最后的重启会话,强制通过 bash 解释器执行,并加入绝对安全的自退机制
|
||||
echo "Starting remote service..."
|
||||
ssh -o StrictHostKeyChecking=accept-new \
|
||||
-i ~/.ssh/id_ed25519 \
|
||||
-p "${SERVER_PORT}" \
|
||||
"${SERVER_USER}@${SERVER_HOST}" /bin/bash << 'EOF'
|
||||
# 1. 严格切入目标目录
|
||||
cd /data/apps/ci-cd/backend || exit 1
|
||||
|
||||
# 2. 精准杀进程,防止 -f 模糊匹配扩大化导致自杀
|
||||
pkill -u "$USER" -f 'app.jar' 2>/dev/null || true
|
||||
sleep 1
|
||||
|
||||
# 3. 强制在标准环境下后台启动
|
||||
nohup java -jar app.jar > app.log 2>&1 < /dev/null &
|
||||
|
||||
# 4. 打印后立刻成功断开
|
||||
echo "Service restart instruction submitted successfully."
|
||||
@@ -0,0 +1,50 @@
|
||||
# ==========================================
|
||||
# 纯 HTML 前端 — rsync 增量部署
|
||||
# ==========================================
|
||||
name: Deploy Static Frontend
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 前端/**
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ci-base
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: http://192.168.31.185:3002/actions/checkout@v4
|
||||
|
||||
- name: Deploy via rsync
|
||||
run: |
|
||||
set -e
|
||||
|
||||
SERVER_HOST="${{ secrets.SSH_HOST }}"
|
||||
SERVER_USER="${{ secrets.SSH_USER }}"
|
||||
SERVER_PORT="${{ secrets.SSH_PORT }}"
|
||||
TARGET_DIR="${{ secrets.TARGET_DIR }}"
|
||||
|
||||
: ${SERVER_HOST:="192.168.31.185"}
|
||||
: ${SERVER_USER:="deploy"}
|
||||
: ${SERVER_PORT:="2222"}
|
||||
: ${TARGET_DIR:="/data/apps/ci-cd/frontend"}
|
||||
|
||||
echo "🌐 部署至 ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR} (端口: ${SERVER_PORT})"
|
||||
|
||||
mkdir -p ~/.ssh && chmod 700 ~/.ssh
|
||||
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
|
||||
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" \
|
||||
"${SERVER_USER}@${SERVER_HOST}" "mkdir -p ${TARGET_DIR}"
|
||||
|
||||
echo "🚀 增量同步 前端/ ..."
|
||||
rsync -rvz --delete \
|
||||
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
|
||||
前端/ \
|
||||
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
|
||||
|
||||
echo "✨ 部署成功!"
|
||||
@@ -0,0 +1,62 @@
|
||||
name: Build & Deploy Vue Frontend
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 前端_npm/**
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: ci-base
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: http://192.168.31.185:3002/actions/checkout@v4
|
||||
|
||||
- name: Environment Info
|
||||
run: |
|
||||
node -v
|
||||
npm -v
|
||||
|
||||
- name: Install & Build
|
||||
run: |
|
||||
cd 前端_npm
|
||||
npm ci
|
||||
npm run build
|
||||
|
||||
- name: Deploy via rsync
|
||||
run: |
|
||||
set -e
|
||||
|
||||
SERVER_HOST="${{ secrets.SSH_HOST }}"
|
||||
SERVER_USER="${{ secrets.SSH_USER }}"
|
||||
SERVER_PORT="${{ secrets.SSH_PORT }}"
|
||||
TARGET_DIR="${{ secrets.VUE_TARGET_DIR }}"
|
||||
|
||||
: ${SERVER_HOST:="192.168.31.185"}
|
||||
: ${SERVER_USER:="deploy"}
|
||||
: ${SERVER_PORT:="2222"}
|
||||
: ${TARGET_DIR:="/data/apps/ci-cd/frontend_npm"}
|
||||
|
||||
echo "Deploy to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
|
||||
|
||||
mkdir -p ~/.ssh
|
||||
chmod 700 ~/.ssh
|
||||
|
||||
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
|
||||
ssh -o StrictHostKeyChecking=accept-new \
|
||||
-i ~/.ssh/id_ed25519 \
|
||||
-p "${SERVER_PORT}" \
|
||||
"${SERVER_USER}@${SERVER_HOST}" \
|
||||
"mkdir -p ${TARGET_DIR}"
|
||||
|
||||
rsync -rvz --delete \
|
||||
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
|
||||
前端_npm/dist/ \
|
||||
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
|
||||
|
||||
echo "Deploy success"
|
||||
@@ -0,0 +1,23 @@
|
||||
name: Test CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main1
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ci-base-cn
|
||||
|
||||
steps:
|
||||
- uses: http://192.168.31.185:3002/actions/checkout@v4
|
||||
|
||||
- name: Environment
|
||||
run: |
|
||||
java -version
|
||||
mvn -version
|
||||
node -v
|
||||
npm -v
|
||||
git --version
|
||||
rsync --version
|
||||
docker --version
|
||||
@@ -0,0 +1 @@
|
||||
124assfdsf
|
||||
@@ -1,53 +0,0 @@
|
||||
name: Deploy Static Frontend
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '前端/**'
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ci-base
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: http://192.168.31.185:3002/actions/checkout@v4
|
||||
|
||||
- name: Deploy via RSYNC
|
||||
run: |
|
||||
set -e
|
||||
|
||||
SERVER_HOST="${{ secrets.SSH_HOST }}"
|
||||
SERVER_USER="${{ secrets.SSH_USER }}"
|
||||
SERVER_PORT="${{ secrets.SSH_PORT }}"
|
||||
TARGET_DIR="${{ secrets.TARGET_DIR }}"
|
||||
|
||||
: ${SERVER_HOST:="192.168.31.185"}
|
||||
: ${SERVER_USER:="shuai"}
|
||||
: ${SERVER_PORT:="2222"}
|
||||
: ${TARGET_DIR:="/data/apps/ci-cd/frontend"}
|
||||
|
||||
echo "Deploy to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
|
||||
|
||||
mkdir -p ~/.ssh
|
||||
chmod 700 ~/.ssh
|
||||
|
||||
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
|
||||
chmod 600 ~/.ssh/id_ed25519
|
||||
|
||||
ssh-keyscan -p "${SERVER_PORT}" -H "${SERVER_HOST}" >> ~/.ssh/known_hosts
|
||||
|
||||
ssh -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" \
|
||||
"${SERVER_USER}@${SERVER_HOST}" \
|
||||
"mkdir -p ${TARGET_DIR}"
|
||||
|
||||
rsync -avz --delete \
|
||||
-e "ssh -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
|
||||
--exclude ".git" \
|
||||
--exclude ".gitea" \
|
||||
./ \
|
||||
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
|
||||
|
||||
echo "Deploy success"
|
||||
+1
-1
@@ -316,4 +316,4 @@ overlay.addEventListener('click', () => {
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.vite/
|
||||
@@ -0,0 +1,12 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Vue App</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Generated
+1327
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "vue-frontend",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": "^3.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^5.1.0",
|
||||
"vite": "^6.0.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<template>
|
||||
<div class="app">
|
||||
<h1>{{ message }}</h1>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
const message = ref('Hello from Vue 3! 再次测试')
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.app { text-align: center; margin-top: 100px; font-family: Arial, sans-serif; }
|
||||
</style>
|
||||
@@ -0,0 +1,4 @@
|
||||
import { createApp } from 'vue'
|
||||
import App from './App.vue'
|
||||
|
||||
createApp(App).mount('#app')
|
||||
@@ -0,0 +1,10 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [vue()],
|
||||
server: {
|
||||
host: '0.0.0.0',
|
||||
port: 5173
|
||||
}
|
||||
})
|
||||
@@ -0,0 +1,5 @@
|
||||
target/
|
||||
*.jar
|
||||
*.class
|
||||
.idea/
|
||||
*.iml
|
||||
@@ -0,0 +1,39 @@
|
||||
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<relativePath/>
|
||||
</parent>
|
||||
|
||||
<groupId>com.app</groupId>
|
||||
<artifactId>backend</artifactId>
|
||||
<version>1.0.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>app</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.app;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class Application {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(Application.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.app.controller;
|
||||
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
public class HelloController {
|
||||
|
||||
@GetMapping("/api/hello")
|
||||
public String hello() {
|
||||
return "Hello from Spring Boot! ";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
server:
|
||||
port: 8990
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: backend
|
||||
Reference in New Issue
Block a user