diff --git "a/Java8-stream/src/main/java/com/\346\265\213\350\257\225/\346\233\277\346\215\242.java" "b/Java8-stream/src/main/java/com/\346\265\213\350\257\225/\346\233\277\346\215\242.java" new file mode 100644 index 0000000000000000000000000000000000000000..e95d95bdbc806199682fd7a2fc854c6cca2b16cd --- /dev/null +++ "b/Java8-stream/src/main/java/com/\346\265\213\350\257\225/\346\233\277\346\215\242.java" @@ -0,0 +1,21 @@ +package com.测试; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class 替换 { + public static void main(String[] args) { + + /** 以下输出要结果 你你的你我他你我*/ + String s = "你" + "你的" + "你我他" + "你我"; + List list = Arrays.asList("你","你的","的你","你我"); + String replase = "[wzpoui]"; +// lifor (int i = 0; i < list.size(); i++) { +//// if () +//// }st = list.stream().sorted((s1,s2)-> s2.length() - s1.length()).collect(Collectors.toList()); + list = list.stream().sorted((s1,s2)-> s2.length() - s1.length()).collect(Collectors.toList()); +// + System.out.println(list.toString()); + } +} diff --git a/cloud-jwt-demo/src/test/java/com/cs/common/AuthTest.java b/cloud-jwt-demo/src/test/java/com/cs/common/AuthTest.java index 9758988aa11b212543e2e4562015e245f4503a20..b67d1dcbdb3b401fd3528f34a82749e7cd9dd3f7 100644 --- a/cloud-jwt-demo/src/test/java/com/cs/common/AuthTest.java +++ b/cloud-jwt-demo/src/test/java/com/cs/common/AuthTest.java @@ -42,7 +42,7 @@ public class AuthTest { @Test - public void testJWTByLocal() throws Exception { + public void testJWTByRedis() throws Exception { // 获取私钥 PrivateKey privateKey = RsaRedisUtils.getPrivateKey(privateKey_S); // 生成token diff --git a/cloud-mysql-tx-demo13306/.gitignore b/cloud-mysql-tx-demo13306/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a2a3040aa86debfd8826d9c2b5c816314c17d9fe --- /dev/null +++ b/cloud-mysql-tx-demo13306/.gitignore @@ -0,0 +1,31 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### 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/ + +### VS Code ### +.vscode/ diff --git a/cloud-mysql-tx-demo13306/.mvn/wrapper/MavenWrapperDownloader.java b/cloud-mysql-tx-demo13306/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000000000000000000000000000000000000..e76d1f3241d38db9b28f05133823bbed1ad289ff --- /dev/null +++ b/cloud-mysql-tx-demo13306/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed 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. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/cloud-mysql-tx-demo13306/.mvn/wrapper/maven-wrapper.jar b/cloud-mysql-tx-demo13306/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 Binary files /dev/null and b/cloud-mysql-tx-demo13306/.mvn/wrapper/maven-wrapper.jar differ diff --git a/cloud-mysql-tx-demo13306/.mvn/wrapper/maven-wrapper.properties b/cloud-mysql-tx-demo13306/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..642d572ce90e5085986bdd9c9204b9404f028084 --- /dev/null +++ b/cloud-mysql-tx-demo13306/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/cloud-mysql-tx-demo13306/README.md b/cloud-mysql-tx-demo13306/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0dd908b25c4bed6344e5b0b315df9f21ce17ec33 --- /dev/null +++ b/cloud-mysql-tx-demo13306/README.md @@ -0,0 +1,6 @@ +# 工程简介 + + + +# 延伸阅读 + diff --git a/cloud-mysql-tx-demo13306/mvnw b/cloud-mysql-tx-demo13306/mvnw new file mode 100644 index 0000000000000000000000000000000000000000..a16b5431b4c3cab50323a3f558003fd0abd87dad --- /dev/null +++ b/cloud-mysql-tx-demo13306/mvnw @@ -0,0 +1,310 @@ +#!/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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + 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" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/cloud-mysql-tx-demo13306/mvnw.cmd b/cloud-mysql-tx-demo13306/mvnw.cmd new file mode 100644 index 0000000000000000000000000000000000000000..c8d43372c986d97911cdc21bd87e0cbe3d83bdda --- /dev/null +++ b/cloud-mysql-tx-demo13306/mvnw.cmd @@ -0,0 +1,182 @@ +@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 Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/cloud-mysql-tx-demo13306/pom.xml b/cloud-mysql-tx-demo13306/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ebf2d3da6360ddb2a53c9b7d4ad4bbde208ded2 --- /dev/null +++ b/cloud-mysql-tx-demo13306/pom.xml @@ -0,0 +1,128 @@ + + + 4.0.0 + + cs-cloud2020 + com.atguigu.cloud + 1.0-SNAPSHOT + + cloud-mysql-tx-demo13306 + cloud-mysql-tx-demo13306 + cloud-mysql-tx-demo13306 + + + 1.8 + UTF-8 + UTF-8 + 2.3.7.RELEASE + + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba + fastjson + 1.2.47 + + + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + ${mybatis.spring.boot.version} + + + com.alibaba + druid-spring-boot-starter + 1.1.10 + + + + mysql + mysql-connector-java + + + + org.springframework.boot + spring-boot-starter-jdbc + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.7.RELEASE + + com.cs.CloudMysqlTxDemo13306Application + + + + repackage + + repackage + + + + + + + + diff --git a/cloud-mysql-tx-demo13306/src/main/java/com/cs/CloudMysqlTxDemoApplication13306.java b/cloud-mysql-tx-demo13306/src/main/java/com/cs/CloudMysqlTxDemoApplication13306.java new file mode 100644 index 0000000000000000000000000000000000000000..dacee9d0e0ee9a158960e4fd3ec379e4362800a0 --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/java/com/cs/CloudMysqlTxDemoApplication13306.java @@ -0,0 +1,13 @@ +package com.cs; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CloudMysqlTxDemoApplication13306{ + + public static void main(String[] args) { + SpringApplication.run(CloudMysqlTxDemoApplication13306.class, args); + } + +} diff --git a/cloud-mysql-tx-demo13306/src/main/java/com/cs/controller/PDFController.java b/cloud-mysql-tx-demo13306/src/main/java/com/cs/controller/PDFController.java new file mode 100644 index 0000000000000000000000000000000000000000..20e4de848ca71ca7b2f9157cb91299d312988dee --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/java/com/cs/controller/PDFController.java @@ -0,0 +1,29 @@ +package com.cs.controller; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.nio.Buffer; +import java.nio.ByteBuffer; + +@RestController +public class PDFController { + + @RequestMapping("/pdf") + public byte[] pdf(HttpServletResponse response) throws Exception{ + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + ServletOutputStream outputStream = response.getOutputStream(); + File file = new File("Z:\\1.pdf"); +// stream.writeTo(fileInputStream); +// outputStream.write(stream.toByteArray()); + response.setContentType(MediaType.APPLICATION_PDF_VALUE); + return stream.toByteArray(); + } +} diff --git a/cloud-mysql-tx-demo13306/src/main/java/com/cs/entities/Test01.java b/cloud-mysql-tx-demo13306/src/main/java/com/cs/entities/Test01.java new file mode 100644 index 0000000000000000000000000000000000000000..971196d54977690154983f8dbf5e41a7918fc39b --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/java/com/cs/entities/Test01.java @@ -0,0 +1,18 @@ +package com.cs.entities; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class Test01 { + + private Integer id; + + private String name; + +} diff --git a/cloud-mysql-tx-demo13306/src/main/java/com/cs/mapper/TestTxMapper.java b/cloud-mysql-tx-demo13306/src/main/java/com/cs/mapper/TestTxMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..2ab1b0448f0d199cb770c2f5509cba4516f9dbd4 --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/java/com/cs/mapper/TestTxMapper.java @@ -0,0 +1,13 @@ +package com.cs.mapper; + +import com.cs.entities.Test01; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +@Mapper +public interface TestTxMapper { + + Test01 selectTestById(@Param("id") Integer id); + + Integer updateTestById(Test01 test01); +} diff --git a/cloud-mysql-tx-demo13306/src/main/java/com/cs/service/TestTxService.java b/cloud-mysql-tx-demo13306/src/main/java/com/cs/service/TestTxService.java new file mode 100644 index 0000000000000000000000000000000000000000..457465c2c860cfea5b50a02c1df0565cddc36cdd --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/java/com/cs/service/TestTxService.java @@ -0,0 +1,75 @@ +package com.cs.service; + +import com.cs.entities.Test01; +import com.cs.mapper.TestTxMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class TestTxService { + + @Autowired + private TestTxMapper testTxMapper; + + @Autowired + private TestTxService02 testTxService02; + + public Test01 selectTestById(Integer id){ + return testTxMapper.selectTestById(id); + } + + + /** + * REQUIRED 外部不存在事务时,开启新的事务,外部存在事务时,将进入外部事务中, + * 如果【调用端发生异常】,则调用和被调用端的事务都将回滚--【有异议】 + * + * 【相同类中】 REQUIRED 内部调 REQUIRED(异常) 全部失效 - 回滚 + * 【相同类中】 REQUIRED(异常) 内部调 REQUIRED 全部失效 - 回滚 + * 【相同类中】 无事务(异常) 内部调 REQUIRED 全部生效 - 不回滚 + * 【相同类中】 无事务(异常) 内部调 REQUIRED(异常) 全部生效 - 不回滚 + * 【相同类中】 无事务 内部调 REQUIRED(异常) 全部生效 - 不回滚 书上讲的不对 + * 【相同类中】 REQUIRED(异常) 内部调 无事务(异常) 全部失效 - 回滚 + * 【相同类中】 REQUIRED(异常) 内部调 无事务 全部失效 - 回滚 + * 【相同类中】 REQUIRED 内部调 无事务(异常) 全部失效 - 回滚 + * + * 【不同类中】 REQUIRED 内部调 REQUIRED(异常) 全部失效 - 回滚 + * 【不同类中】 REQUIRED(异常) 内部调 REQUIRED 全部失效 - 回滚 + * 【不同类中】 无事务(异常) 内部调 REQUIRED 全部生效 - 不回滚 + * 【不同类中】 无事务(异常) 内部调 REQUIRED(异常) 外部不回滚-内部回滚 + * 【不同类中】 无事务 内部调 REQUIRED(异常) 外部不回滚-内部回滚 书上讲的不对 + * 【不同类中】 REQUIRED(异常) 内部调 无事务(异常) 全部失效 - 回滚 + * 【不同类中】 REQUIRED(异常) 内部调 无事务 全部失效 - 回滚 + * 【不同类中】 REQUIRED 内部调 无事务(异常) 全部失效 - 回滚 + * @param test01 + * @return + */ + + + /** + * @Author: CS + * @Description: + * 【相同类中】 REQUIRED 内部调 REQUIRED(异常) 全部失效 - 回滚 + */ + @Transactional(propagation = Propagation.REQUIRED) + public Integer updateTestById(Test01 test01){ + Integer integer = testTxMapper.updateTestById(test01); + this.updateTestById01(); +// Integer integer1 = testTxService02.updateTest01ById(); + Integer i = 1 /0; + return integer; + } + + @Transactional(propagation = Propagation.SUPPORTS) + public Integer updateTestById01(){ + Test01 test01 = new Test01(); + test01.setId(2); + test01.setName("内部修改"); + Integer integer = testTxMapper.updateTestById(test01); +// Integer i = 1 /0; + return integer; + } + + +} diff --git a/cloud-mysql-tx-demo13306/src/main/java/com/cs/service/TestTxService02.java b/cloud-mysql-tx-demo13306/src/main/java/com/cs/service/TestTxService02.java new file mode 100644 index 0000000000000000000000000000000000000000..0dc6350748eef919c21995e887d24fa28845d42d --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/java/com/cs/service/TestTxService02.java @@ -0,0 +1,26 @@ +package com.cs.service; + +import com.cs.entities.Test01; +import com.cs.mapper.TestTxMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class TestTxService02 { + + @Autowired + private TestTxMapper testTxMapper; + +// @Transactional(propagation = Propagation.REQUIRES_NEW) + public Integer updateTest01ById(){ + Test01 test01 = new Test01(); + test01.setId(3); + test01.setName("TestTxService02"); + Integer integer = testTxMapper.updateTestById(test01); + Integer i = 1 / 0; + return integer; + } + +} diff --git a/cloud-mysql-tx-demo13306/src/main/resources/application.properties b/cloud-mysql-tx-demo13306/src/main/resources/application.properties new file mode 100644 index 0000000000000000000000000000000000000000..ae893d5bf8f46263649f1c54a277fa47f5c1c6bb --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/resources/application.properties @@ -0,0 +1,4 @@ +server.port=13306 +spring.application.name=cloud-mysql-tx-demo13306 + + diff --git a/cloud-mysql-tx-demo13306/src/main/resources/application.yaml b/cloud-mysql-tx-demo13306/src/main/resources/application.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ca2cc11183729f30cdc4d4981aef725e1ae589f5 --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/resources/application.yaml @@ -0,0 +1,10 @@ +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + url: jdbc:mysql://10.120.145.80:13306/test01?useUnicode=true&characterEncoding=utf-8&useSSL=false + username: root + password: root + +mybatis: + mapperLocations: classpath:mapper/*.xml + type-aliases-package: com.cs.entities # 所有Entity别名类所在包 \ No newline at end of file diff --git a/cloud-mysql-tx-demo13306/src/main/resources/mapper/TestTxMapper.xml b/cloud-mysql-tx-demo13306/src/main/resources/mapper/TestTxMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ec94c141c34734eed8f34a4d7a9f17f85efc6e0 --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/main/resources/mapper/TestTxMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + update test01 set + name = #{name} + where id = #{id} + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-mysql-tx-demo13306/src/test/java/com/cs/CloudMysqlTxDemo13306ApplicationTests.java b/cloud-mysql-tx-demo13306/src/test/java/com/cs/CloudMysqlTxDemo13306ApplicationTests.java new file mode 100644 index 0000000000000000000000000000000000000000..19e7e51861a62da9f67de9726a56a862c874aaeb --- /dev/null +++ b/cloud-mysql-tx-demo13306/src/test/java/com/cs/CloudMysqlTxDemo13306ApplicationTests.java @@ -0,0 +1,31 @@ +package com.cs; + +import com.cs.entities.Test01; +import com.cs.mapper.TestTxMapper; +import com.cs.service.TestTxService; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class CloudMysqlTxDemo13306ApplicationTests { + + @Autowired + private TestTxService testTxService; + + @Test + void TestTx() { + Test01 test01 = testTxService.selectTestById(2); + System.err.println(test01.toString()); + } + + @Test + void TestTxUpdated() { + Test01 test01 = new Test01(); + test01.setId(1); + test01.setName("updated1"); + Integer integer = testTxService.updateTestById(test01); + System.err.println(integer); + } + +} diff --git a/cloud-redis-server8006/src/main/java/com/test/controller/TestController.java b/cloud-redis-server8006/src/main/java/com/test/controller/TestController.java index cd876128eca079ee3fdb5a2d26e8797e0f510cfa..cbec9cbccefc5954075038ea9b5a419269bf86d2 100644 --- a/cloud-redis-server8006/src/main/java/com/test/controller/TestController.java +++ b/cloud-redis-server8006/src/main/java/com/test/controller/TestController.java @@ -32,7 +32,7 @@ public class TestController { @GetMapping("test") public Map test(){ - var my = new HashMap(); + HashMap my = new HashMap(); redisTemplate.opsForValue().set("name","cs"); Object o = redisTemplate.opsForValue().get("name"); @@ -43,7 +43,7 @@ public class TestController { @GetMapping("testAppend") public Map test01(){ - var my = new HashMap(); + HashMap my = new HashMap(); redisTemplate.opsForValue().append("name","nb"); Object o = redisTemplate.opsForValue().get("name"); my.put("name",o.toString()); diff --git a/cloud-shiro-demo-8089/src/main/java/com/cs/Users/controller/UserController.java b/cloud-shiro-demo-8089/src/main/java/com/cs/Users/controller/UserController.java index 2edeb6d7ab332e318370e51efa66da8380b77913..8ce7e39fbc85dbe3db31f737d61020ea394b53ed 100644 --- a/cloud-shiro-demo-8089/src/main/java/com/cs/Users/controller/UserController.java +++ b/cloud-shiro-demo-8089/src/main/java/com/cs/Users/controller/UserController.java @@ -13,9 +13,15 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import java.util.HashMap; +import java.util.Map; @Controller +@RequestMapping("/api") public class UserController { @Autowired @@ -60,28 +66,35 @@ public class UserController { return "user/Login"; } - /** - * @Author 丛硕 - * @Description //TODO 登陆 验证 - * @Date 13:54 2020/3/5 0005 - * @Param - * @return - **/ + Map map = new HashMap<>(); + + + /** + * @Author 丛硕 + * @Description //TODO 登陆 验证 + * @Date 13:54 2020/3/5 0005 + * @Param + * @return + **/ @PostMapping("/Login") - public String login(User user, Model model){ + public String login(User user, Model model, HttpServletResponse response){ // User byName = userService.findByName(user.getUsername(), user.getPassword()); // if (byName == null){ // return "user/add"; // } Subject subject = SecurityUtils.getSubject(); - + UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(user.getUsername(), user.getPassword()); try { - subject.login(new UsernamePasswordToken(user.getUsername(),user.getPassword())); + subject.login(usernamePasswordToken); } catch (AuthenticationException e) { model.addAttribute("login","用户名或密码不正确"); System.out.println("登陆失败"); return "user/Login"; } + String token1 = user.getUsername() + user.getPassword(); + Cookie cookie = new Cookie("token", token1); + cookie.setPath("/"); +// response.addCookie(); model.addAttribute("login","登陆成功"); return "index"; } @@ -108,4 +121,11 @@ public class UserController { model.addAttribute("msg", "安全退出!"); return "user/Login"; } + + @RequestMapping("/token") + public String token(){ + System.out.println("====================="); + return "index"; + } + } diff --git a/cloud-shiro-demo-8089/src/main/java/com/cs/Users/shiro/ShiroConfig.java b/cloud-shiro-demo-8089/src/main/java/com/cs/Users/shiro/ShiroConfig.java index ec1580a7a2e0f3ae633df3d1a9c382b5cc6b7f22..94e8911b396324e14542bfd615ac3ce13b45847a 100644 --- a/cloud-shiro-demo-8089/src/main/java/com/cs/Users/shiro/ShiroConfig.java +++ b/cloud-shiro-demo-8089/src/main/java/com/cs/Users/shiro/ShiroConfig.java @@ -43,13 +43,13 @@ public class ShiroConfig { public ShiroFilterFactoryBean shiroFilter(DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); - shiroFilterFactoryBean.setLoginUrl("/login"); - shiroFilterFactoryBean.setSuccessUrl("/index"); + shiroFilterFactoryBean.setLoginUrl("/api/login"); + shiroFilterFactoryBean.setSuccessUrl("/api/index"); // shiroFilterFactoryBean.setUnauthorizedUrl("/UnauthorizedUrl"); LinkedHashMap map = new LinkedHashMap<>(); - map.put("/index","anon"); - map.put("/login", "anon"); - map.put("/Login","anon"); + map.put("/api/index","anon"); + map.put("/api/login", "anon"); + map.put("/api/Login","anon"); map.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(map); diff --git a/cloud-shiro-demo-8089/src/main/resources/application.yml b/cloud-shiro-demo-8089/src/main/resources/application.yml index 2fd786b00b9d0a047486a929f55d7897e80b4703..404ae7ce815d4aa6e6ae578057acfa1638e8fa48 100644 --- a/cloud-shiro-demo-8089/src/main/resources/application.yml +++ b/cloud-shiro-demo-8089/src/main/resources/application.yml @@ -5,7 +5,8 @@ spring: name: SpringBoot_Shiro datasource: driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://127.0.0.1:3306/spring_shiro +# url: jdbc:mysql://127.0.0.1:3306/spring_shiro + url: jdbc:mysql://10.120.145.80:13306/spring username: root password: root mvc: diff --git a/cloud-shiro-demo-8089/src/main/resources/templates/index.html b/cloud-shiro-demo-8089/src/main/resources/templates/index.html index 46ca40a636353b70fda9e06f657848c0d1802210..45bbe75338bbb8221c6068b15fbd88318ba174e4 100644 --- a/cloud-shiro-demo-8089/src/main/resources/templates/index.html +++ b/cloud-shiro-demo-8089/src/main/resources/templates/index.html @@ -5,11 +5,13 @@ 首页 -

欢迎来到首页

- +

欢迎来到首页

+ -登陆 -登出 + 登陆 + 登出 +
+ 输出token \ No newline at end of file diff --git a/cloud-shiro-demo-8089/src/main/resources/templates/user/Login.html b/cloud-shiro-demo-8089/src/main/resources/templates/user/Login.html index 6d927174f92b5877937c979d7c7ee6160a8f1e4a..3fec676863750dcc3dcbd0770322798535ed912e 100644 --- a/cloud-shiro-demo-8089/src/main/resources/templates/user/Login.html +++ b/cloud-shiro-demo-8089/src/main/resources/templates/user/Login.html @@ -6,7 +6,7 @@ -
+ 用户名: 密 码: diff --git a/cloud-thread-demo/pom.xml b/cloud-thread-demo/pom.xml index 4d4a0701b71553e022690f7860c902667a8ca263..8d7bc4c1649935983129d2fbe0e3df2050d86ac6 100644 --- a/cloud-thread-demo/pom.xml +++ b/cloud-thread-demo/pom.xml @@ -10,6 +10,18 @@ 4.0.0 cloud-thread-demo + + + + org.apache.maven.plugins + maven-compiler-plugin + + 10 + 10 + + + + org.springframework.boot diff --git a/cloud-thread-demo/src/main/java/com/cs/cyclicBarrierTest/CyclicBarrierDemo02.java b/cloud-thread-demo/src/main/java/com/cs/cyclicBarrierTest/CyclicBarrierDemo02.java new file mode 100644 index 0000000000000000000000000000000000000000..fc8398d2a6e527216fe8c087d5d98b47075e6051 --- /dev/null +++ b/cloud-thread-demo/src/main/java/com/cs/cyclicBarrierTest/CyclicBarrierDemo02.java @@ -0,0 +1,65 @@ +package com.cs.cyclicBarrierTest; + +import org.junit.jupiter.params.shadow.com.univocity.parsers.common.fields.AllIndexesSelector; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.Callable; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.CyclicBarrier; + +/** + * CyclicBarrier parties指代 多少为一批 可以用于多线程计算数据,最后合并计算结果的场景 + * + * + * + */ +public class CyclicBarrierDemo02 { + private static List> list = new ArrayList<>(); + static { + for (int i = 1; i <= 6; i++) { + List currentList = new ArrayList<>(); + for (int i1 = 1; i1 <= 1000; i1++) { + currentList.add(1); + } + list.add(currentList); + } + } + public static void main(String[] args) throws InterruptedException { + int total = 6; + final Integer[] count = {0}; + final List listCountCurrent = new ArrayList<>(); + // 数字为多少个1起执行 + CyclicBarrier cyclicBarrier = new CyclicBarrier(total,()->{ + System.out.println("线程执行完毕 比对结果"); + System.out.println(listCountCurrent); + long count1 = 0; + for (int i1 = 0; i1 < listCountCurrent.size(); i1++) { + count1 += listCountCurrent.get(i1); + } + System.out.println("总计算结果值:" + count1); + }); + + for (int i = 0; i < 6; i++) { + final int temp = i; + new Thread(() -> { + System.out.println(Thread.currentThread().getName() + "=================== 线程要执行了"); + List integers = list.get(temp); + long count1 = 0; + for (int i1 = 0; i1 < integers.size(); i1++) { + count1 += integers.get(i1); + } + System.out.println(count1); + listCountCurrent.add((int) count1); + try { + cyclicBarrier.await(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (BrokenBarrierException e) { + throw new RuntimeException(e); + } + },i + "").start(); + } + } +} \ No newline at end of file diff --git a/cloud-thread-demo/src/main/java/com/cs/memorybarrier/Test.java b/cloud-thread-demo/src/main/java/com/cs/memorybarrier/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..95bb2cbcf0b1c4daa1ffe94eb0a5d01f263ee5de --- /dev/null +++ b/cloud-thread-demo/src/main/java/com/cs/memorybarrier/Test.java @@ -0,0 +1,36 @@ +package com.cs.memorybarrier; + +public class Test { + int a,b; + public static void main(String[] args) { + final Test obj = new Test(); + + + new Thread(() ->{ + System.out.println("method1"); + obj.method1(); + }).start(); + + new Thread(() ->{ + System.out.println("method0"); + obj.method0(); + }).start(); + + } + + void method0(){ + a = 1; + b = 1; + } + + void method1(){ + while (b == 0) { + System.out.println("b:" + b); + continue; + } + System.out.println("a:" + a); + System.out.println("b:" + b); + assert(a == 1); + } + +} diff --git a/cloud-thread-demo/src/main/java/com/cs/volatileT/Count_demo.java b/cloud-thread-demo/src/main/java/com/cs/volatileT/Count_demo.java new file mode 100644 index 0000000000000000000000000000000000000000..36bdd05b8559a9c64a731172cc2ea6d0e9af6de1 --- /dev/null +++ b/cloud-thread-demo/src/main/java/com/cs/volatileT/Count_demo.java @@ -0,0 +1,21 @@ +package com.cs.volatileT; + +public class Count_demo { + public static volatile int count = 0; + + public static void main(String[] args) throws InterruptedException { + for (int i = 0; i < 20; i++) { + new Thread(new Runnable() { + @Override + public void run() { + for (int i1 = 0; i1 < 1000; i1++) { + count = count + 1; + } + System.out.println(Thread.currentThread().getName()+"值为:" + count); + } + },String.valueOf(i)).start(); + } + Thread.sleep(1500); + System.out.println("count 的和为:"+count); + } +} \ No newline at end of file diff --git a/cloud-thread-demo/src/main/java/com/cs/volatileT/DoubleCheckSingleton.java b/cloud-thread-demo/src/main/java/com/cs/volatileT/DoubleCheckSingleton.java new file mode 100644 index 0000000000000000000000000000000000000000..1a3b494a2223c5f330eaaf0fe7c8825333a5ffce --- /dev/null +++ b/cloud-thread-demo/src/main/java/com/cs/volatileT/DoubleCheckSingleton.java @@ -0,0 +1,17 @@ +package com.cs.volatileT; + +public class DoubleCheckSingleton { + private static volatile DoubleCheckSingleton _instance = null; + + public static DoubleCheckSingleton getInstance() { + if (_instance == null) { + synchronized (DoubleCheckSingleton.class) { + if (_instance == null) { + _instance = new DoubleCheckSingleton(); + } + } + } + + return _instance; + } +} \ No newline at end of file diff --git a/cloud-thread-demo/src/main/java/com/cs/volatileT/Test.java b/cloud-thread-demo/src/main/java/com/cs/volatileT/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..ad669220737e8a132e3926db20d0d89bbd4a6233 --- /dev/null +++ b/cloud-thread-demo/src/main/java/com/cs/volatileT/Test.java @@ -0,0 +1,66 @@ +package com.cs.volatileT; + +import java.util.concurrent.ThreadFactory; + +public class Test { + public static boolean a = false; + + public static void set(){ + System.out.println("第一次修改a为true"); + a = true; + System.out.println("第一次修改完毕 记为A"); + System.out.println("第二次修改a为false"); + a = false; + System.out.println("第二次修改完毕 记为B"); + System.out.println("第三次修改a为true"); + a = true; + System.out.println("第三次修改完毕 记为A"); + } + + public static void get(){ + int i = 0; + System.out.println("获取"); + while (!a){ + if (i == 0){ + System.out.println("获取a:" + a); + i ++; + }if (i == 1){ + System.out.println("不停的获取a:" + a + "......."); + i++; + } + } + + System.out.println("获取a为true结束"); + } + + static Object object = new Object(); + static boolean b = false; + public static void get0(){ + System.out.println("首次获取a:" + a); + int i = 0; + int a1 = 0; + while (i < 100000){ + if (b != a){ + + b = a; + a1 ++; + System.out.println("第"+ a1 +"次获取修改得值:" + a); + } + i++; + + } + System.out.println(a1); + } + + public static void main(String[] args) { + new Thread(() ->{ + get0(); + }).start(); + + new Thread(() ->{ + set(); + }).start(); + + + } +} diff --git a/cloud-timed-Taskdemo/pom.xml b/cloud-timed-Taskdemo/pom.xml index 11b4b316c22fdba379911d74bb06131d38d21414..c386f474b278d53d37ba157dfe01142c10b1e0c9 100644 --- a/cloud-timed-Taskdemo/pom.xml +++ b/cloud-timed-Taskdemo/pom.xml @@ -10,6 +10,18 @@ 4.0.0 cloud-timedTask-demo + + + + org.apache.maven.plugins + maven-compiler-plugin + + 10 + 10 + + + + org.springframework.boot diff --git a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/async/AsyncTask.java b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/async/AsyncTask.java index 5f38a05237c808c9255912e6de00ed460be493ea..0327032ab197514c1a622e303ae4d4a58294dec3 100644 --- a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/async/AsyncTask.java +++ b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/async/AsyncTask.java @@ -17,13 +17,13 @@ public class AsyncTask { System.out.println("...等待完成任务2.。执行结果是。" + result2.get()); FutureTask ft = new FutureTask(task1); +// Future reuslt2 = (Future) service.submit(ft); + ft.run(); + System.out.println("FutureTask 执行结果是:" + ft.get()); +// System.out.println("...等待任务3.。执行结果是:" + reuslt2.get()); - Future reuslt2 = (Future) service.submit(ft); + service.shutdown(); - System.out.println("...等待任务3.。执行结果是:" + result2.get()); - - return; -// service.shutdown(); } @@ -35,7 +35,7 @@ class MyTask2 implements Runnable { @Override public void run() { try { - Thread.sleep(100000); + Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } @@ -50,7 +50,7 @@ class MyTask1 implements Callable { @Override public String call() throws Exception { - System.out.println("...线程执行callable任务。"); + System.out.println("...线程MyTask1执行callable任务。"); return "success"; } diff --git a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/atomic/AtomicTest.java b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/atomic/AtomicTest.java index c995c01e1c893928e34133f5e4d791bd7cc8a51e..c412e7bb2bcb471f2c82e7e341dfdf7e11db1264 100644 --- a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/atomic/AtomicTest.java +++ b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/atomic/AtomicTest.java @@ -7,6 +7,7 @@ public class AtomicTest { public static void main(String[] args) { AtomicTest atomicTest = new AtomicTest(); atomicTest.atomicMarkableReference(); + atomicTest.atomicReferenceFieldUpdater(); } @@ -27,20 +28,22 @@ public class AtomicTest { Class studentClass = AtomicTest.Student.class; - AtomicReferenceFieldUpdater atomicFieldUpdater = AtomicReferenceFieldUpdater.newUpdater(studentClass, String.class, "name"); + AtomicReferenceFieldUpdater atomicNameFieldUpdater = AtomicReferenceFieldUpdater.newUpdater(studentClass, String.class, "name"); + AtomicReferenceFieldUpdater atomicAgeFieldUpdater = AtomicReferenceFieldUpdater.newUpdater(studentClass, String.class, "age"); AtomicTest.Student student = new AtomicTest().new Student(); - Object tes = atomicFieldUpdater.getAndSet(student, "cs"); + atomicNameFieldUpdater.getAndSet(student, "cs"); + atomicAgeFieldUpdater.getAndSet(student, "27"); - System.out.println(student.getName() + student.getAge()); + System.out.println(student.getName() + "==" +student.getAge()); - Object cs = atomicFieldUpdater.getAndSet(student, "cs"); + Object cs = atomicNameFieldUpdater.getAndSet(student, "cs"); System.out.println(cs.toString()); System.out.println(student.getName()); - boolean b1 = atomicFieldUpdater.compareAndSet(student, "cs1", "ss"); + boolean b1 = atomicNameFieldUpdater.compareAndSet(student, "cs", "ss"); System.out.println(b1); System.out.println(student.getName()); diff --git a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/cas/CasDemo.java b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/cas/CasDemo.java index 54cf34da990e296299ca65718bef86d0b232ff4e..ceb7a7f6cebf7fcc7eb49421be706a0ea902e909 100644 --- a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/cas/CasDemo.java +++ b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/cas/CasDemo.java @@ -18,7 +18,7 @@ public class CasDemo { } /** - * 其自选锁设计的模式是:打个比方现在有两个线程分别是:线程A,和线程B,根据JMM模型:当这两个线程运行的时候会从主线程中copy + * 其自旋锁设计的模式是:打个比方现在有两个线程分别是:线程A,和线程B,根据JMM模型:当这两个线程运行的时候会从主线程中copy * 一份主线的变量副本到各自的线程中,当线程对其变量进行操作之后会从新写回主线程(因为Atomic类加了volatile修饰,既保住了 * 可见性,原子型,禁止指令重排)比如说 A线程拿到int类型值为3的i之后对其加了100,那么B线程执行的时候就会拿本地变量跟主线程 * 进行比对,如果两个值不相同那么,就会从新拷贝主线程的值到本地一份,从新进行操作 diff --git a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/controller/TestThreadPool.java b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/controller/TestThreadPool.java index 29feebab6a93e3c22adb2cf49c19d5b69ead2d04..54e901c29ef0267b6a7cf571abcb153ea59e395e 100644 --- a/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/controller/TestThreadPool.java +++ b/cloud-timed-Taskdemo/src/main/java/com/atguigu/springcloud/controller/TestThreadPool.java @@ -1,10 +1,6 @@ package com.atguigu.springcloud.controller; import cn.hutool.core.date.DateUtil; -<<<<<<< HEAD -======= -import com.atguigu.springcloud.entities.CommonResult; ->>>>>>> remotes/origin/slave import com.atguigu.springcloud.mapper.TestMapper; import com.atguigu.springcloud.thread.ThreadPoolDemo; import com.atguigu.springcloud.utils.MyCache; @@ -12,11 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; - -<<<<<<< HEAD -======= -import javax.xml.crypto.Data; ->>>>>>> remotes/origin/slave import java.util.Date; import java.util.HashMap; import java.util.List; @@ -26,15 +17,9 @@ import java.util.concurrent.atomic.AtomicInteger; @Controller() public class TestThreadPool { - -<<<<<<< HEAD -======= - ->>>>>>> remotes/origin/slave @Autowired private TestMapper testMapper; - @Autowired private ThreadPoolDemo threadPoolDemo; private static int t = 1; @@ -92,7 +77,6 @@ public class TestThreadPool { @ResponseBody @RequestMapping("/get1") -<<<<<<< HEAD public List> sel() { Map map = new HashMap<>(); map.put("NET_CARD", "NET_CARD"); @@ -103,21 +87,4 @@ public class TestThreadPool { List> mapList = testMapper.select(map); return mapList; } -======= - public List> sel(){ - Map map = new HashMap<>(); - map.put("NET_CARD","NET_CARD"); - map.put("TRAFFIC","TRAFFIC"); - map.put("FLOW_TIME","FLOW_TIME"); - map.put("tablename","snmap_network_traffic"); - map.put("nowTime", DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss")); - List> mapList = testMapper.select(map); - return mapList; - } - - - ->>>>>>> remotes/origin/slave - - } diff --git a/cloud-timed-Taskdemo/src/main/resources/application.yml b/cloud-timed-Taskdemo/src/main/resources/application.yml index 172a8f8f02c6940910b688a6e0d24b82a07f4980..46287b164bc03cbc229fec4b49be1393f88cd0d6 100644 --- a/cloud-timed-Taskdemo/src/main/resources/application.yml +++ b/cloud-timed-Taskdemo/src/main/resources/application.yml @@ -12,10 +12,5 @@ spring: password: root mybatis: -<<<<<<< HEAD mapperLocations: classpath:mapper/*.xml # 所有Entity别名类所在包 type-aliases-package: com.atguigu.com.atguigu.springcloud.entities -======= - mapperLocations: classpath:mapper/*.xml - type-aliases-package: com.atguigu.com.atguigu.springcloud.entities # 所有Entity别名类所在包 ->>>>>>> remotes/origin/slave diff --git a/pom.xml b/pom.xml index a18a33354ef68063648084af26c3c9fd772e9467..9105b43b26b1052497a0d679dd387c1ea81fcc6d 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,7 @@ cloud-importSelector-demo10001 cloud-redis-spring-boot-starter cloud-dubbo-parent + cloud-mysql-tx-demo13306 pom