diff --git a/_posts/2023-01-07-Maven.md b/_posts/2023-01-07-Maven.md index 695091b..f4f2913 100644 --- a/_posts/2023-01-07-Maven.md +++ b/_posts/2023-01-07-Maven.md @@ -19,7 +19,7 @@ Maven是一个项目管理工具,可以对Java项目进行自动化的构建 项目构建:提供标准的,跨平台的自动化构建项目的方式 -依赖管理:方便快捷的管理项目依赖的资源(jar包) ,避免资源间的版本冲突等问题 +依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题 统一开发结构:提供标准的,统一的项目开发结构,如图 @@ -33,11 +33,9 @@ https://maven.apache.org/download.cgi # 3. Maven仓库 -官网:https://mvnrepository.com/ +https://mvnrepository.com/ -运行Maven的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。 - -如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库。 +运行Maven的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库。 ## 3.1. 本地仓库 @@ -60,15 +58,37 @@ maven默认连接的远程仓库位置并不在国内,下载速度非常慢, ``` -# 4. 在idea中配置maven +# 4. 在IDEA中配置maven 打开settings,搜索maven即可 -# 5. Maven打包jar +# 5. Maven指令 + +使用公司搭建的maven库,先清空之前仓库中的maven依赖 `mvn clean install`(在maven项目的路径下执行) + +# 6. Maven插件 + +maven-compiler-plugin: 用于编译 Java 代码。 + +maven-surefire-plugin: 用于运行单元测试。 + +maven-jar-plugin: 用于打包 JAR 文件。 + +maven-war-plugin: 用于打包 WAR 文件。 -`mvn clean package` +maven-install-plugin: 用于将项目安装到本地 Maven 仓库中。 -# 6. nexus仓库管理器 +maven-deploy-plugin: 用于将项目部署到远程 Maven 仓库中。 + +maven-release-plugin: 用于发布项目的正式版本。 + +maven-site-plugin: 用于生成项目文档网站。 + +maven-dependency-plugin: 用于管理项目的依赖项。 + +maven-clean-plugin: 用于清理项目的目录。 + +# 7. nexus仓库管理器 nexus 做 maven仓库管理器,代理远程仓库及部署第三方构件 ```xml @@ -87,7 +107,259 @@ nexus 做 maven仓库管理器,代理远程仓库及部署第三方构件 ``` -# 7. 常用命令 +# 8. pom.xml文件 + +pom.xml文件是Maven 项目管理工具中使用的项目对象模型(Project Object Model)文件,通常简称为 POM 文件。它是 Maven 项目的核心文件之一,用于描述项目的基本信息、依赖关系、构建选项、插件配置等。 + +在 Maven 中,每个项目都应该包含一个 POM 文件,以便 Maven 能够正确地构建该项目。POM 文件通常位于项目的根目录下,文件名为 pom.xml。 + +POM 文件由 XML 编写,其中包含了一些元素和属性,用于描述项目的各个方面。例如,POM 文件中通常包含以下信息: + +项目的坐标(groupId、artifactId、version)、依赖关系、构建选项和插件配置、开发者信息、许可证信息等。通过这些信息,Maven 可以自动下载依赖项、编译代码、运行测试、打包构建结果等 + +## 8.1. 标签 + +------------------------------- + +`` 标签: pom.xml 文件的根元素,它包含了整个项目的配置信息。 + +`` 标签: 指定 POM 文件所使用的项目对象模型(Project Object Model)的版本号。在当前版本的 Maven 中,POM 模型的版本号为 4.0.0。 + +`` 标签: 指定当前项目的父项目,它通常用于继承父项目的配置和依赖项。 + +`` 标签: 指定项目的组 ID,通常使用倒置的域名(例如 com.example)。 + +`` 标签: 指定项目的 artifact ID,通常是项目名称的小写形式(例如 my-project)。 + +`` 标签: 指定项目的版本号,通常使用 Semantic Versioning 规范(例如 1.0.0)。 + +`` 标签: 指定项目的人类可读名称。 -使用公司搭建的maven库,先清空之前仓库中的maven依赖 `mvn clean install`(在maven项目的路径下) +`` 标签: 指定项目的描述信息,通常是一个简短的描述,用于描述项目的目的和功能。 + +`` 标签: 指定项目的打包类型,通常是 jar 或 war、pom + +`` 标签: 指定项目的属性,可以在项目中通过 ${propertyName} 的形式来引用这些属性。 + +------------------------------- + +`` 标签用于统一管理项目的依赖版本号和依赖范围,避免版本冲突。它可以让子模块继承父模块的依赖信息。这个标签通常被放在父项目的 pom.xml 文件中,子项目可以通过继承父项目的 pom.xml 文件来继承父项目的 `` 标签中定义的依赖版本号和依赖范围。 + +`` 标签用于指定项目的依赖列表,其中每个依赖项都是通过一个 `` 标签来定义的。这个标签通常被放在项目的 pom.xml 文件中,用于声明项目的依赖,以便 Maven 能够自动下载所需的依赖并将其添加到项目构建路径中。 + +`` 标签用于定义一个具体的依赖项,包括依赖的组织、名称、版本号、依赖范围等信息。这个标签通常被定义在 `` 标签内部,用于声明项目的具体依赖。 + +`` 标签中的 `` 元素: 指定依赖项的作用域,例如 compile、test、provided 等。 + +`` 标签: 在依赖项中排除一些不需要的传递性依赖项。 + +`` 标签用于排除传递性依赖中的某些依赖项。在 Maven 项目中,一个依赖项可能会依赖其他的依赖项,这些依赖项被称为传递性依赖。 + +------------------------------- +`` 标签: 指定项目的模块,通常用于多模块项目中,每个模块都用一个 `` 标签来描述。 + +------------------------------- +`` 标签: 指定项目的构建选项。其中包括源代码目录、资源目录、构建插件等信息。 + +`` 标签: 指定项目所使用的 Maven 插件。每个插件都用 `` 标签来描述,其中包括插件的组 ID、artifact ID 和版本号等信息。 + +------------------------------- +`` 标签用于指定项目的发布配置信息,包括发布到哪个仓库、以何种方式发布。包含两个子元素 `` 和 ``,分别用于配置正式版本和快照版本的发布仓库信息。 + +------------------------------- + +`` 标签: 指定项目所使用的远程仓库。每个远程仓库都用 + +`` 标签来描述,其中包括仓库的 URL 和 ID 等信息。 + +`` 标签中的 `` 元素: 指定是否从远程仓库下载快照版本的依赖项。 + +------------------------------- + +`` 标签指定项目中使用的插件仓库 + +------------------------------- +`` 标签: 指定项目的配置文件。每个配置文件都用 `` 标签来描述,其中包括配置文件的 ID、激活条件等信息。 + + +标准模板 + +```xml + + + + + 4.0.0 + + + + org.springframework.boot + spring-boot-starter-parent + 2.7.14 + + + + com.yatoil + yt-dorm + 0.0.1-SNAPSHOT + pom + + yt-dorm project for Spring Boot + + + + 1.0 + 2.9.2 + 0.9.1 + 1.8 + UTF-8 + UTF-8 + + + + + + + + io.springfox + springfox-swagger2 + ${swagger.version} + + + io.springfox + springfox-swagger-ui + ${swagger.version} + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + com.yatoil + dorm-admin + ${yt-dorm.version} + + + + + com.yatoil + dorm-common + ${yt-dorm.version} + + + + + com.yatoil + dorm-dormitory + ${yt-dorm.version} + + + + + + + + + dorm-admin + dorm-common + dorm-dormitory + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + ${project.build.sourceEncoding} + + + + + + + + + nexus-releases + Nexus Release Repository + http://library.yatoil.com:8081/repository/maven-releases/ + + + nexus-snapshots + Nexus Snapshot Repository + http://library.yatoil.com:8081/repository/maven-snapshots/ + + + + + + + + + nexus + Nexus Repository + http://library.yatoil.com:8081/repository/maven-public/ + + true + + + true + + + + + + aliyun-repos + Aliyun Repository + http://maven.aliyun.com/nexus/content/groups/public + + true + + + false + + + + + + + + nexus + Nexus Plugin Repository + http://library.yatoil.com:8081/repository/maven-public/ + + true + + + true + + + + + aliyun-repos + Aliyun Repository + http://maven.aliyun.com/nexus/content/groups/public + + true + + + false + + + + + diff --git "a/_posts/2023-01-12-IDEA\344\275\277\347\224\250.md" "b/_posts/2023-01-12-IDEA\344\275\277\347\224\250.md" index 1a1f741..88a8a2b 100644 --- "a/_posts/2023-01-12-IDEA\344\275\277\347\224\250.md" +++ "b/_posts/2023-01-12-IDEA\344\275\277\347\224\250.md" @@ -86,6 +86,7 @@ sout + 回车 | 快捷键 | 介绍 | | --------------------------- | ------------------------------------------------------------ | +| Ctrl + `/` | 生成注释 | | Ctrl + Y | 删除整行 | | Ctrl + Z 、Ctrl + Shift + Z | 后悔药,撤销、取消撤销 | | Alt + enter | IntelliJ IDEA 根据光标所在问题,提供快速修复选择,光标放在的位置不同提示的结果也不同 | diff --git a/_posts/2023-03-03-Spring Boot.md b/_posts/2023-03-03-Spring Boot.md index 5ceb8b7..d2b0691 100644 --- a/_posts/2023-03-03-Spring Boot.md +++ b/_posts/2023-03-03-Spring Boot.md @@ -257,6 +257,23 @@ SpringApplication类主要做了如下内容: 初始化时,默认链接访问失败,就用国内的 https://start.springboot.io/ +在 Spring Initializr 中创建一个新项目时,各个参数的含义 + +```xml +// 公司域名 +com.yatoil +//项目名称 +dorm +``` + +## 3.1. SpringBoot 单模块项目构建(常规) + + + +## 3.2. SpringBoot 多模块项目构建(父/子模块) + + + # 4. SpringBoot配置文件 SpringBoot使用一个全局的配置文件,配置文件名称是固定的 @@ -1406,7 +1423,7 @@ public class MailService { # 20. SpringBoot整合Dubbo -运行起 Dubbo 应用的一个大前提是先部署一个注册中心 +运行起 Dubbo 应用的一个大前提是先部署一个注册中心,如 ZooKeeper 两个项目Dubbo-provider、Dubbo-consumer @@ -1456,13 +1473,178 @@ dubbo: address: zookeeper://localhost:2181 ``` -# 21. 部署SpringBoot +# 21. SpringBoot项目部署 + +## 21.1. SpringBoot项目打包 + +对于使用 Maven 打包产生的项目产物,在不同的情况下会有不同需求,如: + +1. 将所有代码相关文件打包为 jar 包,使用命令直接执行文件即可启动服务 +2. 文件和依赖分开,分为 jar 包和 /lib 下的依赖包信息,避免 jar 过大传输速度太慢 +3. 配置文件剥离,可以动态修改配置,分为 jar、/lib、.proerties 三个文件 + +### 21.1.1. 默认完整打包版 + +项目完整Jar包,包括相关依赖信息,可以直接执行 + +SpringBoot 项目使用 Maven 打包后的 Jar 包产物命名方式是由项目的 pom.xml 文件定义的,其中的项目 id 和版本信息共同组成打包文件名称 `${artifactId}-${version}.jar` + +要自定义生成的文件名,可以在 pom.xml 的 build 标签中使用 finalName 标签自定义生成 jar 包名称 + +### 21.1.2. 依赖文件外置版 + +若项目的依赖 jar 包比较多但是改动较少,在打包项目时就需要将三方依赖和当前项目分离开来,代码改变时只需要重新打包项目内容即可 + +SpringBoot 默认的配置并不能实现依赖项外置,需要借助 Maven 的 `maven-jar-plugin` 插件和 `maven-dependency-plugin` 插件完成。 + +`maven-jar-plugin` 插件用来配置当前项目 jar 包的配置,如三方依赖引用的路径信息、启动类等。 + +`maven-dependency-plugin` 插件则用来配置将项目的三方依赖放置在指定目录下,并配合 `maven-jar-plugin` 完成项目启动时的依赖 + +在 pom.xml 中添加以下配置 + +```xml + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + lib/ + com.domoment.leaves.LeavesApplication + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + prepare-package + + copy-dependencies + + + ${project.build.directory}/lib + false + false + true + + + + + + +``` + +### 21.1.3. 配置文件外置版 + +若只是需要改动配置文件,而不需要修改源代码,配置文件放在 jar 文件外,会更方便。 + +此时可以在打包时将配置文件等内容移出产物 jar 包,并采用资源配置将配置文件复制到产物指定路径下。 + +在 pom.xml 中添加以下配置 + +```xml + + + + + + src/main/resources + + *.yml + *.properties + + ${project.build.directory} + + + + + org.springframework.boot + spring-boot-maven-plugin + + + repackage + + exec + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + + org.apache.maven.plugins + maven-jar-plugin + + + + *.properties + **/*.properties + *.yml + *.conf + + + + + +``` + +`` 标签配置指定资源操作 + +`spring-boot-maven-plugin` 配置打包同时输出 demo.jar 单文件和 demo-exec.jar 整合依赖的文件,可以选择使用 + +`maven-jar-plugin` 插件中可以设置打包时 jar 包中排除指定的配置文件类型 + +## 21.2. SpringBoot项目部署到服务器 + +``` +nohup java -jar shop-0.0.1-SNAPSHOT.jar > logName.log 2>&1 & +``` + +注:nohup命令:不挂起,即关闭终端,程序继续运行 -## 21.1. 打包jar +## 21.3. SpringBoot项目部署配置项 -打开idea,点击右上角 maven,再点击Lifecycle,再点击package即可打包 +在yml 配置文件中 -## 21.2. 可能的报错 +``` +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 8001 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # 连接数满后的排队数,默认为100 + accept-count: 1000 + threads: + # tomcat最大线程数,默认为200 + max: 800 + # Tomcat启动初始化的线程数,默认值10 + min-spare: 100 +``` + +## 21.4. SpringBoot项目定制banner + +创建banner.txt 放在 resources目录下 + +# 22. 报错情况 解决spring-boot-maven-plugin爆红,添加version,版本要与spring-boot-starter-parent的version一致 @@ -1489,28 +1671,7 @@ Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0 ``` -## 21.3. 部署到服务器 - -``` -nohup java -jar shop-0.0.1-SNAPSHOT.jar > logName.log 2>&1 & -``` - -注:nohup命令:不挂起,即关闭终端,程序继续运行 - -## 21.4. 改端口 - -yml 配置文件中 - -``` -server: - port=8088 -``` - -## 21.5. 定制banner - -创建banner.txt 放在 resources目录下 - -# 22. SpringBoot常用注解 +# 23. SpringBoot常用注解 - @SpringBootApplication:这是Spring Boot应用的主注解,它包含了@ComponentScan、@EnableAutoConfiguration和@Configuration三个注解,用于开启组件扫描、自动配置和配置类扫描等功能。 diff --git a/_posts/2023-03-13-Spring MVC.md b/_posts/2023-03-13-Spring MVC.md index 631bd5c..2fc2ffd 100644 --- a/_posts/2023-03-13-Spring MVC.md +++ b/_posts/2023-03-13-Spring MVC.md @@ -209,7 +209,7 @@ ${msg} 2. 如果jar包存在,显示无法输出,就在IDEA的项目发布中,添加lib依赖 3. 重启Tomcat 即可解决 -# 5. 用注解开发SpringMVC +# 5. 用注解开发SpringMVC(重点) pom.xml 同上 @@ -296,7 +296,7 @@ public class HelloController { # 6. 使用RESTful风格 -在Spring MVC中可以使用 @PathVariable注解,让方法参数的值对应绑定到一个URI模板变量上 +在Spring MVC中可以使用 `@PathVariable`注解,让方法参数的值对应绑定到一个URI模板变量上 ```java @Controller @@ -315,9 +315,9 @@ public class RestFulController { 响应请求的实现方式 -可以通过 @RequestMapping(value = "/hello",method = RequestMethod.GET) 中的method实现不同请求方法的响应 +可以通过 `@RequestMapping(value = "/hello",method = RequestMethod.GET)` 中的method实现不同请求方法的响应 -也可以通过 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping实现不同请求方法的响应 +也可以通过 `@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping`实现不同请求方法的响应 # 7. 重定向和转发 @@ -466,7 +466,7 @@ public class LoginController { ## 8.1. 处理提交的数据 -**提交的域名称和处理方法的参数名一致** +**提交的参数名称和后端方法中定义的参数名一致** 请求 @@ -474,7 +474,7 @@ public class LoginController { 提交数据 : http://localhost:8080/hello?name=hy ``` -直接接收 +后端 ```java @RequestMapping("/hello") @@ -484,7 +484,7 @@ public String hello(String name){ } ``` -**提交的域名称和处理方法的参数名不一致** +**提交的参数名称和后端方法中定义的参数名不一致** 请求 @@ -492,7 +492,7 @@ public String hello(String name){ 提交数据 : http://localhost:8080/hello?username=hy ``` -使用 @RequestParam 处理(建议不管一致不一致都处理一下) +后端使用 `@RequestParam` 处理(建议不管一致不一致都处理一下) ```java @RequestMapping("/hello") @@ -504,14 +504,13 @@ public String hello(@RequestParam("username") String name){ **提交的是一个对象** -接收前端用户传递的参数,判断参数的名字,假设该名字直接在方法参数中,则可以直接接收 - -假设传递的是一个对象User,则匹配User对象中的字段名。如果字段名一致则可以接收,否则接收不到,结果为null +假设前端传递的是一个对象User,则匹配User对象中的字段名。如果字段名一致则可以接收。如果字段名不一致则接收不到,结果为null ```java @Controller public class TestController { @RequestMapping(value = "/test",method = RequestMethod.GET) + // 接收User对象 public String test1(User user){ //转发 return "/WEB-INF/jsp/test.jsp"; @@ -559,11 +558,7 @@ public String hello(@RequestParam("username") String name, Model model){ } ``` -注意: - -ModelMap:继承了LinkedHashMap - -Model:精简版 +注:ModelMap继承了LinkedHashMap。Model是精简版 # 9. 乱码问题解决 @@ -586,7 +581,7 @@ Model:精简版 -# 10. 返回JSON格式数据 +# 10. 返回JSON格式数据(重点) JSON是JavaScript对象的字符串表示法,它使用文本表示一个JS对象的信息,**本质是一个字符串** diff --git "a/_posts/2023-07-26-Docker\345\256\236\350\267\265.md" "b/_posts/2023-07-26-Docker\345\256\236\350\267\265.md" index 836dfd4..eb47683 100644 --- "a/_posts/2023-07-26-Docker\345\256\236\350\267\265.md" +++ "b/_posts/2023-07-26-Docker\345\256\236\350\267\265.md" @@ -39,7 +39,7 @@ docker run \ Linux下的默认配置文件位置`/etc/mongod.conf` ``` -mongod --config /etc/mongod.conf +-d mongo:latest --config /etc/mongod.conf ``` configuration file content @@ -84,6 +84,7 @@ docker exec -it yt-mongo mongosh - 创建数据库用户 ``` +use test db.createUser({ user:"root", pwd:"root", roles:["readWrite", "dbAdmin"] }) ``` @@ -139,13 +140,127 @@ Where `/myredis/conf/` is a local directory containing your `redis.conf` file docker run -v /myredis/conf:/usr/local/etc/redis --name myredis redis redis-server /usr/local/etc/redis/redis.conf ``` +config content +``` +bind 0.0.0.0 +port 6379 +``` - 进入redis容器,使用 ``` docker exec -it yt-redis redis-cli ``` -# 3. 部署flask +# 3. 部署MySQL + +- 数据卷 + +``` +# 存放持久化数据 +docker volume create yt-mysql_data +# 存放日志 +docker volume create yt-mysql_log +# 存放配置 +docker volume create yt-mysql_config +``` + +- 部署命令 + +``` +docker run \ +-d \ +-p 3306:3306 \ +--name yt-mysql \ +# 初始化root用户的密码 +-e MYSQL_ROOT_PASSWORD=root \ +-v yt-mysql_data:/var/lib/mysql \ +-v yt-mysql_config:/etc/mysql/conf.d \ +-v yt-mysql_log:/var/log/mysql \ +mysql +``` + +- Using a custom MySQL configuration file + +The default configuration for MySQL can be found in `/etc/mysql/conf.d`  + +`yt-mysql_config/config-file.cnf` is the path and name of your custom configuration file + +``` +-v yt-mysql_config:/etc/mysql/conf.d \ +``` + +config content + +``` +# Custom config should go here +!includedir /etc/mysql/conf.d/ + +[mysqld] +# 设置监听的IP地址和端口 +bind-address = 0.0.0.0 +port=3306 +# 设置 MySQL 数据库的字符集 +character-set-server=utf8mb4 +collation-server=utf8mb4_unicode_ci +# 设置数据库数据的存放位置 +datadir=/var/lib/mysql +# 设置 MySQL 数据库的默认引擎 +default-storage-engine=INNODB + +# 设置 MySQL 数据库的最大连接数 +max_connections=200 + +# 设置 MySQL 数据库的日志位置 +log_error=/var/log/mysql/error.log + +# 设置 MySQL 数据库的临时文件夹位置 +tmpdir=/tmp + +# 设置 MySQL 数据库的缓存大小 +key_buffer_size=32M +query_cache_size=64M +thread_cache_size=32 +table_open_cache=2048 +table_definition_cache=4096 +sort_buffer_size=2M +read_buffer_size=2M +read_rnd_buffer_size=4M +join_buffer_size=8M +innodb_buffer_pool_size=2G +innodb_log_file_size=512M +innodb_flush_log_at_trx_commit=2 +``` +- where to dbData + +By default, MySQL stores database files in`/var/lib/mysql` + +``` +-v yt-mysql_data:/var/lib/mysql \ +``` + +- where to log + +Log files are usually located at `/var/log/mysql` + +``` +-v yt-mysql_log:/var/log/mysql \ +``` + +- 进入MySQL容器,使用 + +``` +docker exec -it yt-mysql mysql -u root -p +``` + +- 创建用户并允许远程连接 + +```sql +CREATE USER 'username'@'%' IDENTIFIED BY 'password'; + +GRANT ALL PRIVILEGES ON *.* TO 'username'@'%'; +``` + +# 4. 部署flask 只涉及一个容器不需要使用Docker Compose