Преглед изворни кода

refactor: 工程文件补充文件

zhanghaijun пре 3 година
родитељ
комит
5d6b5e991c

+ 18 - 0
.editorconfig

@@ -0,0 +1,18 @@
+# http://editorconfig.org
+root = true
+
+# 空格替代Tab缩进在各种编辑工具下效果一致
+[*]
+indent_style = space
+indent_size = 4
+charset = utf-8
+end_of_line = lf
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.{json,yml,yaml}]
+indent_size = 2
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false

+ 5 - 0
.gitattributes

@@ -0,0 +1,5 @@
+*.js linguist-language=java
+*.html linguist-language=java
+
+# 强制换行符为 LF
+# * text eol=lf

+ 21 - 0
deploy.sh

@@ -0,0 +1,21 @@
+#! /bin/sh
+
+## cd到当前目录
+cd `dirname $0`
+
+VERSION_POM=`awk '/<version>[^<]+<\/version>/{gsub(/<version>|<\/version>/,"",$1);print $1;exit;}' pom.xml`
+
+## 前置条件
+command -v mvn >/dev/null 2>&1 || { echo >&2 "I require maven 3.5 + but it's not installed.  Aborting."; sleep 5; exit 1; }
+
+
+echo "====== release ====== start build to pom.xml ======"
+mvn -D maven.test.skip=true clean package -P prod -s settings.xml
+if [ ! $? -eq 0 ]; then
+echo -e "------ failed error by mvn build ------"
+exit 1;
+fi
+echo '====== release ====== docker build ======'
+mvn -Ddocker.tag.version=v$VERSION_POM -Ddocker.build.url=http://127.0.0.1:2375 docker:removeImage docker:build -amd -s settings.xml
+echo "====== docker build complete ======"
+

+ 10 - 0
dockerfile

@@ -0,0 +1,10 @@
+FROM openjdk:8
+
+WORKDIR /opt/plugins
+
+COPY target/plugins.jar .
+COPY target/lib/* lib/
+COPY --chown=bin src/assembly/bin/*.sh bin/
+
+EXPOSE 8080
+ENTRYPOINT ["java", "-jar", "plugins.jar"]

+ 97 - 9
pom.xml

@@ -17,17 +17,20 @@
     <packaging>jar</packaging>
 
     <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+        <maven.test.skip>true</maven.test.skip>
+        <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
+        <spring-boot.version>2.7.14</spring-boot.version>
+        <hutool.version>5.8.18</hutool.version>
+        <!-- docker 配置 -->
+        <docker.build.url>http://127.0.0.1:2375</docker.build.url>
     </properties>
+
     <dependencies>
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-starter-data-redis</artifactId>-->
-<!--        </dependency>-->
-<!--        <dependency>-->
-<!--            <groupId>org.springframework.boot</groupId>-->
-<!--            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>-->
-<!--        </dependency>-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-thymeleaf</artifactId>
@@ -36,7 +39,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-devtools</artifactId>
@@ -66,11 +68,26 @@
     </dependencies>
 
     <build>
+        <finalName>${project.artifactId}</finalName>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>false</filtering>
+            </resource>
+        </resources>
         <plugins>
+            <!--代码格式插件,默认使用spring 规则-->
+            <plugin>
+                <groupId>io.spring.javaformat</groupId>
+                <artifactId>spring-javaformat-maven-plugin</artifactId>
+                <version>0.0.32</version>
+            </plugin>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <configuration>
+                    <executable>true</executable>
+                    <layout>ZIP</layout>
                     <excludes>
                         <exclude>
                             <groupId>org.projectlombok</groupId>
@@ -79,6 +96,77 @@
                     </excludes>
                 </configuration>
             </plugin>
+            <!--拷贝依赖到jar外面的lib目录-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <!--指定的依赖路径-->
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>3.3.0</version>
+                <configuration>
+                    <appendAssemblyId>false</appendAssemblyId>
+                    <descriptors>
+                        <descriptor>src/assembly/assembly.xml</descriptor>
+                    </descriptors>
+                    <outputDirectory>target</outputDirectory>
+                </configuration>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- 'https://github.com/spotify/docker-maven-plugin' -->
+            <plugin>
+                <groupId>com.spotify</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>1.2.2</version>
+                <configuration>
+                    <imageName>${project.artifactId}:${project.version}-${maven.build.timestamp}</imageName>
+                    <dockerDirectory>${project.basedir}</dockerDirectory>
+                    <dockerHost>${docker.build.url}</dockerHost>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
+    <repositories>
+        <repository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public/</url>
+        </repository>
+        <repository>
+            <id>spring-releases</id>
+            <url>https://repo.spring.io/libs-release</url>
+        </repository>
+    </repositories>
+    <pluginRepositories>
+        <pluginRepository>
+            <id>public</id>
+            <name>aliyun nexus</name>
+            <url>https://maven.aliyun.com/repository/public/</url>
+        </pluginRepository>
+        <pluginRepository>
+            <id>spring-releases</id>
+            <url>https://repo.spring.io/libs-release</url>
+        </pluginRepository>
+    </pluginRepositories>
 </project>

+ 19 - 0
settings.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<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">
+
+    <pluginGroups>
+        <pluginGroup>com.spotify</pluginGroup>
+    </pluginGroups>
+    <mirrors>
+        <mirror>
+            <id>aliyun</id>
+            <mirrorOf>central</mirrorOf>
+            <name>aliyun maven</name>
+            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
+        </mirror>
+    </mirrors>
+</settings>

+ 53 - 0
src/assembly/assembly.xml

@@ -0,0 +1,53 @@
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+    <id>package</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <includeBaseDirectory>true</includeBaseDirectory>
+    <fileSets>
+        <!--
+            0755-> 即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
+            0644-> 即用户具有读写权限,组用户和其它用户具有只读权限;
+        -->
+        <fileSet>
+            <directory>src/assembly/bin</directory>
+            <outputDirectory>bin</outputDirectory>
+            <fileMode>0755</fileMode>
+            <lineEnding>unix</lineEnding>
+            <filtered>true</filtered>
+        </fileSet>
+        <fileSet>
+            <directory>src/assembly/docker</directory>
+            <outputDirectory>docker</outputDirectory>
+            <fileMode>0755</fileMode>
+            <lineEnding>unix</lineEnding>
+            <filtered>true</filtered>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/resources</directory>
+            <outputDirectory>config</outputDirectory>
+            <fileMode>0755</fileMode>
+            <filtered>true</filtered>
+            <includes>
+                <include>*.yaml</include>
+                <include>*.properties</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.build.directory}</directory>
+            <outputDirectory>/</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+    <dependencySets>
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <outputDirectory>lib</outputDirectory>
+            <outputFileNameMapping>${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}</outputFileNameMapping>
+        </dependencySet>
+    </dependencySets>
+</assembly>

+ 4 - 0
src/assembly/bin/start.sh

@@ -0,0 +1,4 @@
+#!/bin/bash
+
+
+java -Dloader.path=./lib -jar plugins.jar

+ 178 - 0
src/assembly/bin/wait-for-it.sh

@@ -0,0 +1,178 @@
+#!/bin/bash
+# Use this script to test if a given TCP host/port are available
+## https://github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh
+
+WAITFORIT_cmdname=${0##*/}
+
+echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi; }
+
+usage() {
+	cat <<USAGE >&2
+Usage:
+    $WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args]
+    -h HOST | --host=HOST       Host or IP under test
+    -p PORT | --port=PORT       TCP port under test
+                                Alternatively, you specify the host and port as host:port
+    -s | --strict               Only execute subcommand if the test succeeds
+    -q | --quiet                Don't output any status messages
+    -t TIMEOUT | --timeout=TIMEOUT
+                                Timeout in seconds, zero for no timeout
+    -- COMMAND ARGS             Execute command with args after the test finishes
+USAGE
+	exit 1
+}
+
+wait_for() {
+	if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
+		echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
+	else
+		echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
+	fi
+	WAITFORIT_start_ts=$(date +%s)
+	while :; do
+		if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
+			nc -z $WAITFORIT_HOST $WAITFORIT_PORT
+			WAITFORIT_result=$?
+		else
+			(echo -n >/dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
+			WAITFORIT_result=$?
+		fi
+		if [[ $WAITFORIT_result -eq 0 ]]; then
+			WAITFORIT_end_ts=$(date +%s)
+			echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
+			break
+		fi
+		sleep 1
+	done
+	return $WAITFORIT_result
+}
+
+wait_for_wrapper() {
+	# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
+	if [[ $WAITFORIT_QUIET -eq 1 ]]; then
+		timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
+	else
+		timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
+	fi
+	WAITFORIT_PID=$!
+	trap "kill -INT -$WAITFORIT_PID" INT
+	wait $WAITFORIT_PID
+	WAITFORIT_RESULT=$?
+	if [[ $WAITFORIT_RESULT -ne 0 ]]; then
+		echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
+	fi
+	return $WAITFORIT_RESULT
+}
+
+# process arguments
+while [[ $# -gt 0 ]]; do
+	case "$1" in
+	*:*)
+		WAITFORIT_hostport=(${1//:/ })
+		WAITFORIT_HOST=${WAITFORIT_hostport[0]}
+		WAITFORIT_PORT=${WAITFORIT_hostport[1]}
+		shift 1
+		;;
+	--child)
+		WAITFORIT_CHILD=1
+		shift 1
+		;;
+	-q | --quiet)
+		WAITFORIT_QUIET=1
+		shift 1
+		;;
+	-s | --strict)
+		WAITFORIT_STRICT=1
+		shift 1
+		;;
+	-h)
+		WAITFORIT_HOST="$2"
+		if [[ $WAITFORIT_HOST == "" ]]; then break; fi
+		shift 2
+		;;
+	--host=*)
+		WAITFORIT_HOST="${1#*=}"
+		shift 1
+		;;
+	-p)
+		WAITFORIT_PORT="$2"
+		if [[ $WAITFORIT_PORT == "" ]]; then break; fi
+		shift 2
+		;;
+	--port=*)
+		WAITFORIT_PORT="${1#*=}"
+		shift 1
+		;;
+	-t)
+		WAITFORIT_TIMEOUT="$2"
+		if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
+		shift 2
+		;;
+	--timeout=*)
+		WAITFORIT_TIMEOUT="${1#*=}"
+		shift 1
+		;;
+	--)
+		shift
+		WAITFORIT_CLI=("$@")
+		break
+		;;
+	--help)
+		usage
+		;;
+	*)
+		echoerr "Unknown argument: $1"
+		usage
+		;;
+	esac
+done
+
+if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
+	echoerr "Error: you need to provide a host and port to test."
+	usage
+fi
+
+WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-20}
+WAITFORIT_STRICT=${WAITFORIT_STRICT:-0}
+WAITFORIT_CHILD=${WAITFORIT_CHILD:-0}
+WAITFORIT_QUIET=${WAITFORIT_QUIET:-0}
+
+# Check to see if timeout is from busybox?
+WAITFORIT_TIMEOUT_PATH=$(type -p timeout)
+WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH)
+
+WAITFORIT_BUSYTIMEFLAG=""
+if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
+	WAITFORIT_ISBUSY=1
+	# Check if busybox timeout uses -t flag
+	# (recent Alpine versions don't support -t anymore)
+	if timeout &>/dev/stdout | grep -q -e '-t '; then
+		WAITFORIT_BUSYTIMEFLAG="-t"
+	fi
+else
+	WAITFORIT_ISBUSY=0
+fi
+
+if [[ $WAITFORIT_CHILD -gt 0 ]]; then
+	wait_for
+	WAITFORIT_RESULT=$?
+	exit $WAITFORIT_RESULT
+else
+	if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
+		wait_for_wrapper
+		WAITFORIT_RESULT=$?
+	else
+		wait_for
+		WAITFORIT_RESULT=$?
+	fi
+fi
+
+if [[ $WAITFORIT_CLI != "" ]]; then
+	if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
+		echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
+		exit $WAITFORIT_RESULT
+	fi
+	exec "${WAITFORIT_CLI[@]}"
+else
+	exit $WAITFORIT_RESULT
+fi

+ 4 - 0
src/assembly/docker/docker-compose.yaml

@@ -0,0 +1,4 @@
+services:
+  plugins:
+    image: plugins
+

+ 0 - 1
src/main/resources/application.properties

@@ -1 +0,0 @@
-

+ 5 - 0
src/main/resources/application.yml

@@ -0,0 +1,5 @@
+spring:
+  application:
+    name: plugins
+server:
+  port: 8080