怎么不使用springboot Helper或Spring Initializr来创建spring项目
1. 创建项目目录结构
首先,创建项目的基本目录结构。一个典型的 Maven 项目结构如下:
my-spring-project
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── myapp
│ │ │ ├── Application.java
│ │ │ └── controller
│ │ │ └── MyController.java
│ │ ├── resources
│ │ │ └── application.properties
│ └── test
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── myapp
│ │ └── ApplicationTests.java
└── pom.xml
2. 初始化 Maven 项目
在项目根目录下创建一个 pom.xml
文件,并添加以下基本配置:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-spring-project</artifactId><version>1.0-SNAPSHOT</version><properties><java.version>17</java.version><spring.version>6.0.8</spring.version></properties><dependencies><!-- Spring Core --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- Spring Web --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- Servlet API --><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0</version><scope>provided</scope></dependency><!-- Jackson for JSON --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.2</version></dependency><!-- JUnit for Testing --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.10.0</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>5.10.0</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.10.1</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin></plugins></build>
</project>
3. 编写主应用程序类
在 src/main/java/com/example/myapp
目录下创建 Application.java
文件:
package com.example.myapp;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.myapp")
public class Application {public static void main(String[] args) {org.springframework.boot.SpringApplication.run(Application.class, args);}
}
4. 配置 Web 服务器
创建一个配置类来启动嵌入式 Tomcat 服务器:
package com.example.myapp;import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class WebServerConfig {@Beanpublic ServletWebServerFactory servletWebServerFactory() {return new TomcatServletWebServerFactory();}
}
5. 创建控制器
在 src/main/java/com/example/myapp/controller
目录下创建 MyController.java
文件:
package com.example.myapp.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}
6. 配置文件
在 src/main/resources
目录下创建 application.properties
文件,可用于配置 Spring 应用的各种属性:
server.port=8080
7. 编写测试类
在 src/test/java/com/example/myapp
目录下创建 ApplicationTests.java
文件:
package com.example.myapp;import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ApplicationTests {@Testvoid contextLoads() {}
}
8. 构建和运行项目
使用以下命令构建和运行项目:
mvn clean install
mvn spring-boot:run
以上步骤将创建一个基本的 Spring 项目,而不依赖于 Spring Boot Helper 工具。这样可以更好地理解 Spring 框架的底层工作原理和配置方式。
相关文章:
怎么不使用springboot Helper或Spring Initializr来创建spring项目
1. 创建项目目录结构 首先,创建项目的基本目录结构。一个典型的 Maven 项目结构如下: my-spring-project ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── example │ │ │ └…...

STM32CubeMX配置-RTC周期唤醒
一、简介 MCU为STM32G070,采用内部时钟32KHZ,配置为周期6s唤醒,调用回调函数,进行喂狗操作。 二、配置 初始时间、日期、周期唤醒时间配置。 开启周期唤醒中断 三、生成代码 调用回调函数,进行喂狗操作。 //RTC唤醒回…...
js如何添加新元素到数组中
1.push方法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。这是向数组添加元素的最常用方法。 let arr [1, 2, 3]; arr.push(4); // 向数组末尾添加元素4 console.log(arr); // 输出: [1, 2, 3, 4] 2.unshift方法 unshift() 方法可向数组的…...
Python变量和基本数据类型
变量和基本数据类型 变量是什么? 变量是存储在内存中的值,这就意味着在创建变量时会在内存中开辟一个空间。 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。 因此,变量可以指定不同…...
嵌入式数据库_1.嵌入式数据库的定义及特点和分类
1.嵌入式数据库的定义及特点 1.1定义 嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精…...
新人学习笔记之(变量)
一、什么是变量 1.变量是存储数据的小盒子,不是里面的数据 2.经常发生改变的数据 二、变量的定义格式 1.数据类型 变量名; 数据类型:为盒子中存储的数据,加入类型【限制】 变量名:为盒子起的名字 分号:语句的结束 三…...

Windows修改CMD窗口编码为UTF-8
windows下的cmd的默认编码是GBK编码,有时可能造成乱码问题,下面是我找到的两种更换编码方式为UTF-8的方法。 1、临时修改 (1)先进入cmd命令窗口(快捷键win键R) (2)直接输入“chcp…...
os实训课程模拟考试(1~7)
操作系统的基本功能和设计目标 1、 操作系统是一组 ____(单选) A、 文件管理程序 B、 资源管理程序 C、 中断处理程序 D、 设备管理程序 2、 以下哪项不是操作系统关心的主要问题?(单选) A、 管理计算机裸机 B、 设计…...
yolov10 学习笔记
目录 推理代码,source可以是文件名,路径, 预测可视化: 预测可视化加nms 训练自己的数据集, 训练一段时间报错:dill库 解决方法: 推理代码,source可以是文件名,路径…...
NAT概述
NAT概念 NAT(Network Address Translation,网络地址转换)是一种用于修改网络地址信息的技术,主要用于在路由器或防火墙上进行地址转换,以解决 IPv4 地址短缺问题、提高网络安全性以及实现私有网络与公有网络之间的通信…...

Ansys Mechanical|学习方法
Ansys Mechanical是Ansys的旗舰产品之一,涉及的学科体系全面丰富,包括的力学分支主要有理论力学,振动理论,连续介质力学,固态力学,物理力学,爆炸力学及应用力学等。 在自媒体及数字经济飞速发展…...

热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...

环形链表2证明
解法 快慢指针相遇后,其中一个指回头部,然后同步前进 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNod…...

fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden的解决方案
零、实验报告地址 计算机视觉实验二:基于支持向量机和随机森林的分类(Part one: 编程实现基于支持向量机的人脸识别分类 )-CSDN博客 一、代码报错 fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden 二、报错原因 通常是由于访问权限不足导致的…...
Verilog-Behavior Level 和 RTL Level 和 GATE Level的区别
硬件设计中对硬件的描述可以具有不同的抽象级别,以Verilog为例: Behavior Level。描述的是硬件的行为,当我们在看到如下关键字时就是行为级别的代码:#,wait,while,force,release等&…...
华为OD机考题HJ1 字符串最后一个单词的长度
前言 描述 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾) 输入描述: 输入一行,代表要计算的字符串,非空,长度小…...

C语言---------深入理解指针
目录 一、字符指针 二、指针数组: 三、数组指针: 1、定义: 2、&数组名和数组名区别: 3、数组指针的使用: 四、数组参数,指针参数: 1、一维数组传参: 2、二维数组传参&am…...

C++ 算法教程
归并排序 #include<iostream> using namespace std; template <class T> void Merge(T data[],int start,int mid,int end) {int len1 mid - start 1, len2 end - mid;int i, j, k;T* left new int[len1];T* right new int[len2];for (i 0; i < len1; i)…...

【支持向量机】问题梳理
学完支持向量机后我有些地方不太清楚,故做如下梳理: 1.为什么支持向量机模型认为一个点划分正确的标志是y(wxb)>1呢,为什么不是y(wxb)>0,比如y为1,wxb为0.5,大于0,则预测正确。 2.所以意思…...

车载网络安全指南 网络安全框架(二)
返回总目录->返回总目录<- 目录 一、概述 二、网络安全组织管理 三、网络安全活动 四、支撑保障 一、概述 汽车电子系统网络安全活动框架包含汽车电子系统网络安全活动、组织管理以及支持保障。其中,网络安全管理活动是框架的核心,主要指汽车电子系统生命周期各阶段…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...