From cc5c3a25853b2710a0da081ce02eabe6ae1cf7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=91=E5=B9=B4=E6=A2=A6=E4=B8=8E=E7=A0=96?= <2847127106@qq.com> Date: Mon, 22 Jul 2024 09:36:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E8=80=834?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 33 +++ .mvn/wrapper/maven-wrapper.properties | 19 ++ day04/.gitignore | 38 +++ day04/pom.xml | 60 ++++ .../main/java/com/bw/Day04Application.java | 19 ++ day04/src/main/resources/application.yml | 110 ++++++++ day4/.gitignore | 38 +++ day4/pom.xml | 59 ++++ .../main/java/com/bw/Day04Application.java | 19 ++ day4/src/main/resources/application.yml | 110 ++++++++ mvnw | 259 ++++++++++++++++++ mvnw.cmd | 149 ++++++++++ pom.xml | 98 +++++++ .../java/com/bw/day04/Day04Application.java | 14 + .../bw/day04/ScheduledPrintNameService.java | 23 ++ src/main/resources/application.properties | 12 + .../com/bw/day04/Day04ApplicationTests.java | 13 + 理论/1721611871489.png | Bin 0 -> 30463 bytes 理论/1721611903751.png | Bin 0 -> 27247 bytes 19 files changed, 1073 insertions(+) create mode 100644 .gitignore create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 day04/.gitignore create mode 100644 day04/pom.xml create mode 100644 day04/src/main/java/com/bw/Day04Application.java create mode 100644 day04/src/main/resources/application.yml create mode 100644 day4/.gitignore create mode 100644 day4/pom.xml create mode 100644 day4/src/main/java/com/bw/Day04Application.java create mode 100644 day4/src/main/resources/application.yml create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/com/bw/day04/Day04Application.java create mode 100644 src/main/java/com/bw/day04/ScheduledPrintNameService.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/com/bw/day04/Day04ApplicationTests.java create mode 100644 理论/1721611871489.png create mode 100644 理论/1721611903751.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +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/ diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..8f96f52 --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.7/apache-maven-3.9.7-bin.zip diff --git a/day04/.gitignore b/day04/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/day04/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/day04/pom.xml b/day04/pom.xml new file mode 100644 index 0000000..78bae64 --- /dev/null +++ b/day04/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + com.bw + day04 + 1.0-SNAPSHOT + + + 8 + 8 + UTF-8 + + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + org.springframework.boot + spring-boot-starter-mail + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/day04/src/main/java/com/bw/Day04Application.java b/day04/src/main/java/com/bw/Day04Application.java new file mode 100644 index 0000000..5b3ad1c --- /dev/null +++ b/day04/src/main/java/com/bw/Day04Application.java @@ -0,0 +1,19 @@ +package com.bw; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @Author:胡杨 + * @name:Day04 + * @Date:2024/7/22 上午9:09 + * @Description: com.bw + */ + +@SpringBootApplication +public class Day04Application { + public static void main(String[] args) { + SpringApplication.run(Day04Application.class, args); + System.out.println("Day04 模块启动成功!"); + } +} diff --git a/day04/src/main/resources/application.yml b/day04/src/main/resources/application.yml new file mode 100644 index 0000000..d137baa --- /dev/null +++ b/day04/src/main/resources/application.yml @@ -0,0 +1,110 @@ +# 服务器相关 + +server: + port: 10001 + +spring: + mvc: + pathmatch: + matching-strategy: ant_path_matcher + datasource: + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/high-six-exam?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: 'huyang' + druid: + # 下面为连接池的补充设置,应用到上面所有数据源中 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + max-active: 20 + # 配置获取连接等待超时的时间 + max-wait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + time-between-eviction-runs-millis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-while-idle: true + test-on-borrow: false + test-on-return: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + pool-prepared-statements: true + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall + use-global-data-source-stat: true +# # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 +# connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + application: + name: shop-server + redis: + host: 127.0.0.1 + port: 6379 + + mail: + host: smtp.qq.com + username: 2847127106@qq.com + password: vhkrbssknqfrdcgi + port: 587 # 这个端口根据实际情况配置,一般都是465 + protocol: smtp # 这里应该是不用改的,我没试过其他的配置 + test-connection: false + default-encoding: UTF-8 + properties: + mail: + debug: true + smtp: + auth: true + connectiontimeout: 10000 + timeout: 10000 + writetimeout: 10000 + socketFactory: + class: javax.net.ssl.SSLSocketFactory + port: 587 + starttls: + enable: true + required: true + select: + multipart: + max-file-size: 100MB # 最大支持文件大小 + max-request-size: 100MB # 最大请求大小 + enabled: true + + +# mybatis +mybatis: + configuration: + map-underscore-to-camel-case: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + mapper-locations: classpath*:mappers/*Mapper.xml + global-config: + db-config: + id-type: auto + + +aliyun: + end-point: oss-cn-shanghai.aliyuncs.com + access-key-id: LTAI5tSFAGrms29r1xwEFtRM + access-key-secret: rztMfqxdYlsMUtIoy9bIOSGEKCWQT7 + access-pre: https://dongxiaojie.oss-cn-shanghai.aliyuncs.com + bucket-name: dongxiaojie + +fdfs: + so-timeout: 1500 # socket 连接时长 + connect-timeout: 600 # 连接 tracker 服务器超时时长 + # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流 + tracker-list: 118.25.113.208:22122 + web-server-url: 118.25.113.208:8888 + pool: + jmx-enabled: false + # 生成缩略图 + thumb-image: + height: 500 + width: 500 + + +# 布隆过滤器配置 +bloom-filter: + expected-insertions: 10000 # 期望插入的元素数量 + fpp: 0.01 # 误判率 + diff --git a/day4/.gitignore b/day4/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/day4/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/day4/pom.xml b/day4/pom.xml new file mode 100644 index 0000000..ae697bf --- /dev/null +++ b/day4/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + com.bw + day4 + 1.0-SNAPSHOT + + + 17 + 17 + UTF-8 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + org.springframework.boot + spring-boot-starter-mail + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/day4/src/main/java/com/bw/Day04Application.java b/day4/src/main/java/com/bw/Day04Application.java new file mode 100644 index 0000000..5b3ad1c --- /dev/null +++ b/day4/src/main/java/com/bw/Day04Application.java @@ -0,0 +1,19 @@ +package com.bw; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @Author:胡杨 + * @name:Day04 + * @Date:2024/7/22 上午9:09 + * @Description: com.bw + */ + +@SpringBootApplication +public class Day04Application { + public static void main(String[] args) { + SpringApplication.run(Day04Application.class, args); + System.out.println("Day04 模块启动成功!"); + } +} diff --git a/day4/src/main/resources/application.yml b/day4/src/main/resources/application.yml new file mode 100644 index 0000000..d137baa --- /dev/null +++ b/day4/src/main/resources/application.yml @@ -0,0 +1,110 @@ +# 服务器相关 + +server: + port: 10001 + +spring: + mvc: + pathmatch: + matching-strategy: ant_path_matcher + datasource: + driver-class-name: com.mysql.jdbc.Driver + url: jdbc:mysql://127.0.0.1:3306/high-six-exam?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: 'huyang' + druid: + # 下面为连接池的补充设置,应用到上面所有数据源中 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + max-active: 20 + # 配置获取连接等待超时的时间 + max-wait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + time-between-eviction-runs-millis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + min-evictable-idle-time-millis: 300000 + validation-query: SELECT 1 FROM DUAL + test-while-idle: true + test-on-borrow: false + test-on-return: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + pool-prepared-statements: true + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + max-pool-prepared-statement-per-connection-size: 20 + filters: stat,wall + use-global-data-source-stat: true +# # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 +# connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 + application: + name: shop-server + redis: + host: 127.0.0.1 + port: 6379 + + mail: + host: smtp.qq.com + username: 2847127106@qq.com + password: vhkrbssknqfrdcgi + port: 587 # 这个端口根据实际情况配置,一般都是465 + protocol: smtp # 这里应该是不用改的,我没试过其他的配置 + test-connection: false + default-encoding: UTF-8 + properties: + mail: + debug: true + smtp: + auth: true + connectiontimeout: 10000 + timeout: 10000 + writetimeout: 10000 + socketFactory: + class: javax.net.ssl.SSLSocketFactory + port: 587 + starttls: + enable: true + required: true + select: + multipart: + max-file-size: 100MB # 最大支持文件大小 + max-request-size: 100MB # 最大请求大小 + enabled: true + + +# mybatis +mybatis: + configuration: + map-underscore-to-camel-case: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + mapper-locations: classpath*:mappers/*Mapper.xml + global-config: + db-config: + id-type: auto + + +aliyun: + end-point: oss-cn-shanghai.aliyuncs.com + access-key-id: LTAI5tSFAGrms29r1xwEFtRM + access-key-secret: rztMfqxdYlsMUtIoy9bIOSGEKCWQT7 + access-pre: https://dongxiaojie.oss-cn-shanghai.aliyuncs.com + bucket-name: dongxiaojie + +fdfs: + so-timeout: 1500 # socket 连接时长 + connect-timeout: 600 # 连接 tracker 服务器超时时长 + # 这两个是你服务器的 IP 地址,注意 23000 端口也要打开,阿里云服务器记得配置安全组。tracker 要和 stroage 服务进行交流 + tracker-list: 118.25.113.208:22122 + web-server-url: 118.25.113.208:8888 + pool: + jmx-enabled: false + # 生成缩略图 + thumb-image: + height: 500 + width: 500 + + +# 布隆过滤器配置 +bloom-filter: + expected-insertions: 10000 # 期望插入的元素数量 + fpp: 0.01 # 误判率 + diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..d7c358e --- /dev/null +++ b/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..6f779cf --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..7cba508 --- /dev/null +++ b/pom.xml @@ -0,0 +1,98 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.2 + + + com.bw + day04 + 0.0.1-SNAPSHOT + day04 + day04 + + + + + + + + + + + + + + + 17 + 2023.0.3 + + + + org.springframework.cloud + spring-cloud-starter-task + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + org.springframework.boot + spring-boot-starter-mail + + + + org.springframework.boot + spring-boot-starter-actuator + + + + mysql + mysql-connector-java + 8.0.33 + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/main/java/com/bw/day04/Day04Application.java b/src/main/java/com/bw/day04/Day04Application.java new file mode 100644 index 0000000..70501d5 --- /dev/null +++ b/src/main/java/com/bw/day04/Day04Application.java @@ -0,0 +1,14 @@ +package com.bw.day04; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@EnableScheduling +public class Day04Application { + public static void main(String[] args) { + SpringApplication.run(Day04Application.class, args); + } + +} diff --git a/src/main/java/com/bw/day04/ScheduledPrintNameService.java b/src/main/java/com/bw/day04/ScheduledPrintNameService.java new file mode 100644 index 0000000..5d2f0de --- /dev/null +++ b/src/main/java/com/bw/day04/ScheduledPrintNameService.java @@ -0,0 +1,23 @@ +package com.bw.day04; + +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * @Author:胡杨 + * @name:ScheduledPrintNameService + * @Date:2024/7/22 上午8:35 + * @Description: com.bw.day04 + */ + +@Component +public class ScheduledPrintNameService { + + // 定时每秒执行一次 + @Scheduled(cron = "*/5 * * * * ?") + public void scheduledPrint() { + System.out.println(new Date()+" 胡杨"); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..ef5467f --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,12 @@ +spring.application.name=day04 + +# \u8FDE\u63A5\u6570\u636E\u5E93 +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +# \u8FDE\u63A5\u540D\u79F0 +spring.datasource.name=defaultDataSource +# \u8FDE\u63A5\u76EE\u6807 +spring.datasource.url=jdbc:mysql://127.0.0.1:3306/high-six-exam?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 +# \u7528\u6237\u540D\u548C\u5BC6\u7801 +spring.datasource.username=root +spring.datasource.password=root550011ROOT + diff --git a/src/test/java/com/bw/day04/Day04ApplicationTests.java b/src/test/java/com/bw/day04/Day04ApplicationTests.java new file mode 100644 index 0000000..34f78e6 --- /dev/null +++ b/src/test/java/com/bw/day04/Day04ApplicationTests.java @@ -0,0 +1,13 @@ +package com.bw.day04; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Day04ApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/理论/1721611871489.png b/理论/1721611871489.png new file mode 100644 index 0000000000000000000000000000000000000000..e9bcb206af0907305f611e74a43274446374a461 GIT binary patch literal 30463 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%0D%YP}%jRe% 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 Vgt^0Qnc!SFY3KAq_3`t!{tf5F(T@NC literal 0 HcmV?d00001 diff --git a/理论/1721611903751.png b/理论/1721611903751.png new file mode 100644 index 0000000000000000000000000000000000000000..7eb7fd58a7a0541bfacffab0de9f6e47a5b68e1b GIT binary patch literal 27247 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 W&x*o;l;W+oq9S9y?AUv(?B4;sJ`V-} literal 0 HcmV?d00001