springboot导包显示不存在_(一)SpringBoot搭建基本后端应用

boot在计算机术语中是启动的意思,SpringBoot也就是Spring的启动器。

稍有经验的JavaWeb程序员对于传统SSM结构的MVC应用,大多数最不好的体验就是搭建一个项目需要进行大量的配置。稍有不慎就可能采坑。更关键的是有些配置基本就不会去进行定制化修改。为了解决这个问题,SpringBoot出世了。就如同我们所想的,SpringBoot给我们进行了大量的默认配置,从而达到了我们部署一个web项目,只需要下几个jar包然后直接运行即可。堪称JavaWeb程序员的新世纪福音。我尽可能的将文章分为实战篇和解析篇。实战文章里面只会涉及到整体的结构,不会过多的阐述细节。比如下面:

要搭建一个基本的后台应用,放在以前我们可能要考虑以下几个方面:

1、web应用的配置

2、maven的配置

3、Spring和SpringMVC的配置

4、日志配置

5、灵活构建

而实际上:

一、web应用的配置 (不用配置)

web应用的配置就是传统项目中web.xml文件的相关配置。我们可以在其中配置Servlet、Filter、Listener等等。在传统的SpringMVC应用中最常见的配置就是在ContextListenter中加载Spring、SpringMVC的配置文件。

不过在SpringBoot项目中,其为我们提供了默认的配置文件。所以我们不用再显示的编辑web.xml文件,省去了这一步骤。假如我们需要自定义Sevlet、Filter或者Listener等,只需要采用注解配置的方式进行配置即可,SpringBoot给我们提供了相关的RegisterBean。具体的配置细节我们目前可以不用了解,以后的实战中会用到。

二、maven的配置 (需要配置)

对于Java项目来说,最常见的包管理工具就是Maven了。Maven的基础配置主要有以下几点:

1、依赖包的坐标

2、编译或者打包的基本配置

3、编译或者打包时的资源过滤,这一步很重要,否则你在编译或者打包后启动项目时会提示你,xxxx配置文件not found等,很可能就是因为你没有配置好资源的过滤

具体配置后面会详细讲到

三、Spring和SpringMVC的配置(部分需要配置)

配置过传统SpringMVC的同学一定会记得spring-application.xml和spring-mvc.xml配置文件。spring-application.xml是spring相关的配置,如解析配置文件的PropertyConfigPlaceholder、开启包注解扫描的component-scan、数据库连接池、代理支持、bean的注册等。spring-mvc.xml则是spring-mvc项目的配置,基本配置项如支持注解的的驱动mvc:driver:annotation,以及如果不是前后端分离的项目还要配置视图解析器viewResolver。如果不是使用JavaConfig的形式启动项目,则需要在web.xml中显式的配置这两个文件的位置。

四、日志配置 (部分需要配置)

在传统的SpringMVC项目中如果想启用日志,我们需要在resources文件夹中创建一个log.properties文件进行相关的配置,然后在pom中添加我们想使用的日志类型的驱动的依赖。而在SpringBoot中,这一步也给我们省去了。默认给我们提供了Slf4j的日志驱动,甚至不用配置就可以启用日志。不过如果你有一些特殊的要求,还是要进行简单的配置。

五、灵活构建 (根据需要选择配置)

我们的环境一般分为分为开发环境、测试环境、线上环境。不同环境下的相关依赖是不同的,最典型的如数据库的配置。我们不可能所有环境都用同一个数据库。根据启动项或者是系统配置等等某个标志来决定系统运行时启用哪个环境的配置进行编译打包就叫做灵活构建。

传统项目中我们进行灵活构建通常直接采用Maven的profile或者是使用AntCall。不过在SpringBoot中我们获得了更好的体验。可以以配置文件名不同的方式直接应用不同的profiles,具体配置请看下面。

一、创建一个基本项目

上面介绍完了我们配置一个项目需要进行哪些配置下面我们来看一个实例。首先打开我们的编译器——IDEA,新建项目:

5edbef65b7686bb515ddadb178497197.png
IDEA自带的SpringBoot项目创建选项

我们直接选用IDEA自带的SpringBoot项目创建选项然后一路Next就行。另外初始化的时候我们选择这几个导包选项,都是我们可能会用到的,最后完成创建,这样我们的一个SpringBoot项目就已经创建完成了,而且现在就可以直接运行了,相比较于传统的SpringMVC项目,是不是方便了100倍。

8ba15c8c421f852622064fa12da21ff1.png

SpringBoot采用JavaConfig的形式来启动项目。让我们找到主包下的启动器类——Application,右键Run Application即可运行。

9efca1f791f7e4b4b428ba4640ceecaf.png

点开@SpringBootApplication我们可以看到这其实就是一些我们常见注解的几何体,只不过被继承成为了一个注解:

da9069b44112a25ebb7626b71f662214.png
SpringBootApplication注解

除了上面自定义注解所必须的四个元注解以外。我们依次来看下面的这几个注解:

1、@SpringBootConfiguration只是简单的继承了@Configuration注解,所以这两个注解没有本质上的区别,他们功能相同。@Configuration标志着其注解的类是JavaConfig类,可以用来配置Spring,作用和xml配置文件相同,并且可以互相引用。

20019fdc80970692eff4f898c0849769.png

2、@ComponentScan:我们如果配置过传统的Spring项目,对这个一定不会陌生。因为我们在使用Spring的时候经常会用到其提供的注解来帮助我们简化代码,提升效率。比如 @Controller、@Service、@Component等等。但是这些配置是Spring提供的,而不是Java自带的,所以为了给其赋予意义,我们必须让Spring去发现我们使用这些注解的地方,从而产生实际价值。@ComponentScan的作用和我们在xml问价中配置的component-scan标签的作用的一样的,默认扫描的包是该注解同级和同级下所有子包中的所有类。因为这也是为什么Application类的位置在主包下了。

3、@EnableAutoConfiguration则是SpirngBoot最重要的注解。我们之前说道SpringBoot只是Spring的一个快速启动器,其给我们带来的最大好处就是提供了默认配置,而这个注解的意思就是开启默认配置。也是体现了SpringBoot作用的最根本配注解。

我们打开resources目录,可以看到一个空的application.properties文件,这个就是SpringBoot项目的配置文件。不过SpringBoot还提供了yml文件的配置方式,相比较于properties文件,我更喜欢yml的配置方式,虽然他们的本质是一样的。所以我们将这个properties文件换成同名的yml文件:

ebf5993bec6b117fd263eb7f8416bf35.png

二、配置MySql数据源和启用Mybatis支持

作为一个web项目,数据库可以说是我们所必须的。而在RDS(关系型数据库)中我们最常用的就是MySql了。如下图所示,我们就配置好了我么你的数据源。

1e5d0a61842d9afc9f78f143e7fef096.png
SpringBoot中数据源的配置

可以看到yml配置文件中,我们能够清楚的看到配置之间的层级关系。举个例子,将图中的url转换为properties配置则是:

spring.datasource.url =xxxxxx

只要是datasource相关的配置,我们都要写上spring.datasource的前缀,个人觉得看起来十分混乱。

配置完数据库之后,我们总不能直接用传统的JPA进行操作吧,过于繁琐。所以我们还要继续配置Mybatis相关的配置。好消息是SpringBoot默认集成了Mybaits,所以我们只需要配置其扫描Alias别名的主包就行,这样Mybatis就会检测到com.zzz.base包以及其子包下的所有@Alias注解,以便于我们在mapper.xml中用到。

a697fd9a11aadbc9df9538d9a2566dc5.png

配置完之后我们来看下如何使用Mybatis。

要想使用Mybatis操作数据库,按照惯例我们需要编写mapper接口、mapper.xml文件、service接口以及其实现类。我们来写一个简单的例子:

883fd8e9ada2714b0765fb213994cbca.png

假设这是一个我们的User类,我们为其设置了别名Alias(value = "User")

330077a0bb9950ba4b190caa8e254459.png
User相关的Mapper

我们需要为其编写Mapper接口和xml文件,这里可能有个问题,SpringBoot项目中如何让Mybatis识别到Mapper接口呢?答案就是我们为其加上@Mapper注解就行了

0cde4cba3223b450d9a928f04d27b13f.png

下面来看一个基本的Mapper.xml的实现,还以User为例

5da5431bdd466a17d915701ce7076326.png

e6e68ad3f6f92c8a12f1d8d97ce61350.png

ca6db051fddd12af0e68d733b463a0f0.png

UserMap中的返回值类型type="User" 这里的User就是我们在前面实体类上使用@Alias注解表明的别名。然后我们将Mapper接口注入到Service中就行了,并且为Service加上@Service注解将其注册成一个单例的Bean

2973caabdbee95be827963b9b7849dd3.png

d8156987a24fd8583eaab8a2db182de0.png

至此,我们的Mybatis也配置完了。

三、maven相关配置

为了讲明为什么要配置maven,我还以上面的(二)为例子。

a621cd93710f079f4054cc4c3623f55c.png
User相关类的目录结构

简单来看下User相关类的目录结构。能够发现Mapper接口和Mapper.xml文件是在同一目录下的。如果我们不显式的进行maven相关的配置,则一定会遇到的问题就是xml文件找不到。

310da0c54e8d34485f5e8fe4b5f1f947.png
编译后输出的target文件夹

即在编译后输出的target文件夹中找不到我们编写的xml文件,只能看到.java文件编译后的.class文件。

maven中给我们提供的<build></build>标签选项,可以让我们自己控制文件资源的过滤。

b220dcd7f8f54977687f04c361fc26a6.png
maven配置资源过滤

如上图所示,我们在build标签的字标签resources标签下,配置了两个resource标签。代表了两个应用于全局的资源过滤规则。<direction>指定为src/main/java标示该条规则作用于其本身和其所有的子包。<includes>标签标示哪些资源是我们需要的,如果使用maven提供的占位符机制,我们还可以同时配置<filter>,不过既然是Spring项目,我们最好还是使用Spring提供的PropertyPlaceholderConfig。<include>标签中使用了ant风格的路径,**/*.xml表示src/main/java包,以及其所有子包中的xml文件在编译打包时会原封不动的保留下来。同理可得下面的配置表示,resources文件夹下通常指默认保留.properties文件,通过显式指定,我们可以在resources文件夹下添加更多的配置供我们使用。

四、配置灵活构建

前面有说道,SpringBoot中的灵活构建十分好用。那他好用在什么地方呢?我们来一探究竟。

7074f8834656f14cc1457f2457a9ea8b.png
灵活构建的配置文件

我们在配置文件中的spring级别下配置当前配置文件对应的profiles级别:

6709f4194633f72fa11b06daea34806d.png
在application.yml中指定默认启用的profiles为dev

c1f85c5d41cf51a9c3fcd679daecf42d.png
application-dev.yml中指定分支的名字为dev

4eb813086e4e4294524899b6b72cfc90.png
application-prd.yml中指定分支的名字为prd

上面是我配置好的灵活构建的配置,其中application.yml配置文件可以看成是共享配置,application-dev.yml是开发环境配置,application-prd.yml是生产环境配置。他们是工作模式类似于不同配置项去并集,相同配置项覆盖。当我们在本地运行项目时,SpringBoot默认加载的是不带后缀名的application.yml配置文件,但是解析到其中指定了启用dev分支,则会在resources文件夹下寻找名为applicayion-dev.xml的配置文件进行解析。一定要注意的是,不仅名字后缀名要为dev,而且里面的配置profiles名也要和后缀名保持一致,这样才能给SpringBoot寻找到,毕竟约定先行与配置,既然给我们制定了规则,我们照做就行了。

比如:我在application.yml中配置了log的日志级别为INFO,在application-dev.yml中配置了日志级别为DEBUG,在application-prd中没有配置日志级别。

则当我们启用dev分支时,日志级别为DEBUG(没有配置取并集),当我们启用prd分支时,则实际上日志级别为INFO(相同配置覆盖)。

那么我们如何取显式的选择启用某个分支呢?最常见的方式就是在启动命令中加上命令行参数如:

java -jar xxx.jar --spring.profiles.active=prd

这样我们就在启动xxx.jar时指定了分支为prd,从而application-prd.yml配置文件会生效。

比如

c53568e543e600c80e8327c9736b9939.png

这样我们就以启动了loan-spring-boot.jar包,并且应用的是prd分支。

五、日志相关

要想做好一个项目,日志管理是必不可少的。因为我们在排查错误时一定要用到日志。

不过SpringBoot默认给我们提供了按天切割的日志机制。每天会产生一个新文件,十分的好用。我们只需要配置日志的级别和生成的日志文件的位置就可以啦。

f487c0dbe84c47ed637406ea62a6be2b.png
指定某个包极其子包下的所有日志

2ec8417668acf44c9dfa011caf74c3ae.png
指定所有日志都应用debug级别的日志

现在,一个SpringBoot的web项目就已经配置完成了。我们接下来只需要写Controller就行了。

下面是我自己做的一个不完全的后台模板。

https://github.com/GayITHub/back-template​github.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么需要超出48K的音频采样率,以及PCM到DSD的演进

网上很多观点说&#xff0c;根据采样定理&#xff0c;48K的音频采样率即可无损的表示音频模拟信号&#xff08;人耳最多可以听到20K的音频&#xff09;&#xff0c;为何还需要96K&#xff0c; 192K等更高的采样率呢&#xff1f;最先我也有这样的疑问&#xff0c;毕竟采样定理是…

171. Excel Sheet Column Number (Easy)

Given a column title as appear in an Excel sheet, return its corresponding column number. For example: A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 思路&#xff1a;1.26进制转化为十进制&#xff0c;ord()函数&#xff1b;2.逐个读入字符串中的每…

f12获取网页文本_8招教你快速搞定网页内容禁止复制粘贴,想怎么复制就怎么复制...

大家平时在搜索资料、浏览网页时&#xff0c;经常会复制一些内容。尤其是文字比较多时&#xff0c;比起一个个字手打&#xff0c;复制能省下不少功夫。可有时候好不容易找到资料了&#xff0c;却发现有些网站上的内容文本复制不了&#xff1f;甚至右键菜单都打不开&#xff01;…

为什么需要超过48k的采样音频?

最近在看音频的事情&#xff0c;随便拿点东西出来聊一下&#xff0c;如果说的不对&#xff0c;请用棒槌来打我&#xff0c;这样我晚上睡觉就不用数绵羊了。我播放一个20HZ~20KHZ的音频&#xff0c;如下图我使用16K的采样率来采集它是声音信号&#xff0c;获取音频如下图我使用4…

HDU 2859 Phalanx(二维DP)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2859 题目大意&#xff1a;对称矩阵是这样的矩阵&#xff0c;它由“左下到右”线对称。 相应位置的元素应该相同。 例如&#xff0c;这里是3 * 3对称矩阵&#xff1a; cbx     cpb     zcc 给出任意的…

Linux io内存存在的意义~

今天是母亲节&#xff0c;首先祝各位读者的母亲节日快乐&#xff0c;祝你们的母亲年轻健康。母亲节是一个亘古的话题&#xff0c;我本来想写个文章&#xff0c;但是想起来这周就一个周末&#xff0c;要花点时间陪下家人&#xff0c;昨天我们老大开会&#xff0c;特别说了&#…

imx6 配置串口波特率_RS232串口多机通信

一、基本原理1、主从多机通信拓扑图2、主从多机通信的具体过程 1)使所有的从机的SM2位置1&#xff0c;以便接收主机发来的地址&#xff1b;2)主机发出一帧地址信息&#xff0c;其中包括8位需要与之通信的从机地址&#xff0c;第9位为1&#xff1b;3)所有从机接收到地址帧后&…

android设置访问internet权限

如果在app中访问网络&#xff0c;提示internet permission denied&#xff0c;即是没有设置访问网络的权限 在AndroidManifest.xml文件中添加如下一行即可 <uses-permission android:name"android.permission.INTERNET" />转载于:https://www.cnblogs.com/Awan…

一个故事讲完CPU的工作原理

上二年级的小明正坐在教室里。现在是数学课&#xff0c;下午第一节&#xff0c;窗外的蝉鸣、缓缓旋转的吊扇让同学们昏昏欲睡。此时&#xff0c;刘老师在黑板上写下一个问题&#xff1a;6324 244675 &#xff1f;小明抬头看了一眼&#xff0c;觉得这两个数字挺眼熟。他昨天翘…

axure弹窗关闭_干货来袭,Axure插入图标的几种办法

前言在日常绘制原型的时候&#xff0c;经常会需要插入相应的图标&#xff08;icon&#xff09;到Axure中&#xff0c;但是看似好像很简单的事情也给蛮多小伙伴造成了困扰。现在很多开发团队都会用一些比较常见的前端框架来搭建后台管理系统&#xff0c;例如常见的Element-UI&am…

用指针实现高低位倒序,疯了吧

昨晚在微信群看到一个读者发的面试题目&#xff0c;从网上截图出来的&#xff0c;我百思不得其解&#xff0c;题目如图。幸好&#xff0c;我学过栈栈&#xff0c;C语言实现然后我写了个小程序第一个方法比较笨&#xff0c;当我写完自己的代码后&#xff0c;看到有同学发了自己的…

部署nexus服务

一、安装和启动 官网下载nexus-2.12安装包&#xff0c;地址&#xff1a;https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.12.0-01-bundle.tar.gz 此版本需要预先安装jdk1.7 解压后&#xff0c;用命令【./bin/nexus start】来启动 nexus有如下一些控制命令&…

天然气表怎么看多少方_上海考大学难度怎么样?看2019上海高考“成绩分布表”和“本科分数线”就知道了!...

参加高考的同学和家长们注意了~上海市教育考试院近日发布本市普通高等学校秋季招生本科各批次录取控制分数线和成绩分布表。艺术类、体育类本科文化控制分数线也同步公布。&#xff08;鲁申君注&#xff1a;上海2019年高考本科总分660&#xff0c;专科总分450&#xff0c;不分文…

关于Linux内核代码不使用typedef的讨论?

C语言关键字 -&#xff08;typedef关键字&#xff09;typedef有点像火隐忍者里面的万花筒写轮眼&#xff0c;用起来非常炫酷有型&#xff0c;使你的代码更加简短&#xff0c;让你穿上你亲妈都认不出你的马甲…比如这样一段代码typedef struct point{int x, y;} Points;Points f…

基于深度学习模型的花卉图像分类代码_华为不止有鸿蒙!教你快速入门华为免编程深度学习神器ModelArts...

引言&#xff1a;本文介绍利用华为ModelArts进行深度学习的图像分类任务&#xff0c;不用一行代码。今年8月9日&#xff0c;在华为史上规模最大的开发者大会上&#xff0c;华为正式发布全球首个基于微内核的全场景分布式OS——鸿蒙操作系统(HarmonyOS)。但你知道吗&#xff1f;…

洛谷P3405 [USACO16DEC]Cities and States省市

P3405 [USACO16DEC]Cities and States省市 题目描述 To keep his cows intellectually stimulated, Farmer John has placed a large map of the USA on the wall of his barn. Since the cows spend many hours in the barn staring at this map, they start to notice severa…

天线的原理

关注、星标公众号&#xff0c;不错过精彩内容来源&#xff1a;中兴文档小时候家里的收音机、电视机&#xff0c;都带着可以灵活转动拉伸的杆子&#xff0c;大家一定对这个可以转来转去的杆子记忆犹新&#xff0c;或许也好奇的发现这个杆子的长度与方向和收音机、电视的接收效果…

2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考

论文&#xff1a;Rethinking Depthwise Separable Convolutions: How Intra-Kernel Correlations Lead to Improved MobileNetshttps://arxiv.org/pdf/2003.13549.pdf​arxiv.org代码地址&#xff1a;zeiss-microscopy/BSConv​github.com一、背景一些轻量级的网络&#xff0c;…

Node.js 得到当前目录下文件修改文件名

博客园第一篇,平时都用 .net ,现在 node.js 比较火&#xff0c;就用它做一些小工具&#xff0c;比较方便 Node.js 得到当前目录下文件修改文件名,把 .txt 修改为.md var fs require(fs); var fileDirectory __dirname if (fs.existsSync(fileDirectory)) {fs.readdir(fileDir…

原来你也在写公众号

现在凌晨1点&#xff0c;我睡不着&#xff0c;因为今天打球了&#xff0c;每次打球回来我总是睡得很奇怪&#xff0c;奇怪有时候打球回来一躺下就睡着了&#xff0c;有时候打球回来就会习惯性失眠。脑海里总是浮现各种打球的进球动作&#xff0c;然后各种幻想&#xff0c;再加上…