发布网友 发布时间:2024-09-10 07:36
共1个回答
热心网友 时间:2024-10-28 04:58
SpringBoot项目结构及功能在IntelliJ使用SpringInitializer快速创建项目
这是pom文件中父项目,再进一步查看其spring-boot-starter-parent
发现真正管理SpringBoot应用里面的所有依赖版本的地方在这spring-boot-dependencies
SpringBoot的版本仲裁中心;
以后我们导入依赖默认是不需要写版本;(没有在dependencies里面管理的依赖自然需要声明版本号)
再往下看:
这是springboot的web场景启动器,只要引入了它,就能帮我们导入了web模块正常运行所依赖的组件;
@SpringBootApplication:SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
@SpringBootConfiguration:SpringBoot的配置类:标注在某个类上,表示这是一个SpringBoot的配置类;
@Configuration:配置类上来标注这个注解;
配置类-----配置文件;配置类也是容器中的一个组件;@Component
@EnableAutoConfiguration:开启自动配置功能;
以前我们需要配置的东西,SpringBoot帮我们自动配置;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能;这样自动配置才能生效;
在src下创建一个controller包,新建一个HelloController类,之后运行springboot,便可以通过localhost:/8080/hello来访问hello页面。
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
?application.properties
?application.yml
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
springboot启动会扫描以下位置的application.properties或者application.yml文件作为Springboot的默认配置文件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
application.yml
@Value获取值和@ConfigurationProperties获取值比较
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
==我们还可以通过spring.config.location来改变默认的配置文件位置==
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;
java-jarspring-boot-02-config-02-0.0.1-SNAPSHOT.jar--spring.config.location=G:/application.properties
SpringCloud整体构架设计(一)SpringClound整体核心架构只有一点:Rest服务,也就是说在整个SpringCloud配置过程之中,所有的配置处理都是围绕着Rest完成的,在这个Rest处理之中,一定要有两个端:服务的提供者(Provider)、服务的消费者(Consumer),所以对于整个SpringCloud基础的结构就如下所示:
既然SpringCloud的核心是Restful结构,那么如果要想更好的去使用Rest这些微服务还需要考虑如下几个问题。
1、所有的微服务地址一定会非常的多,所以为了统一管理这些地址信息,也为了可以及时的告诉用户哪些服务不可用,所以应该准备一个分布式的注册中心,并且该注册中心应该支持有HA机制,为了高速并且方便进行所有服务的注册操作,在SpringCloud里面提供有一个Eureka的注册中心。
对于整个的WEB端的构架(SpringBoot实现)可以轻松方便的进行WEB程序的编写,而后利用Nginx或Apache实现负载均衡处理,但是你WEB端出现了负载均衡,那么业务端呢?应该也提供有多个业务端进行负载均衡。那么这个时候就需要将所有需要参与到负载均衡的业务端在Eureka之中进行注册。
在进行客户端使用Rest架构调用的时候,往往都需要一个调用地址,即使现在使用了Eureka作为注册中心,那么它也需要有一个明确的调用地址,可是所有的操作如果都利用调用地址的方式来处理,程序的开发者最方便应用的工具是接口,所以现在就希望可以将所有的Rest服务的内容以接口的方式出现调用,所以它又提供了一个Feign技术,利用此技术可以伪造接口实现。
在进行整体的微架构设计的时候由于牵扯的问题还是属于RPC,所以必须考虑熔断处理机制,实际上所有的熔断就好比生活之中使用保险丝一样,有了保险丝在一些设备出现了故障之后依然可以保护家庭的电器可以正常使用,如果说现在有若干的微服务,并且这些微服务之间可以相互调用,例如A微服务调用了B微服务,B微服务调用了C微服务。
如果在实际的项目设计过程之中没有处理好熔断机制,那么就会产生雪崩效应,所以为了防止这样的问题出现,SpringCloud里面提供有一个Hystrix熔断处理机制,以保证某一个微服务即使出现了问题之后依然可以正常使用。
通过Zuul的代理用户只需要知道指定的路由的路径就可以访问指定的微服务的信息,这样更好的提现了java中的“key=value”的设计思想,而且所有的微服务通过zuul进行代理之后也更加合理的进行名称隐藏。
在SpringBoot学习的时候一直强调过一个问题:在SpringBoot里面强调的是一个“零配置”的概念,本质在于不需要配置任何的配置文件,但是事实上这一点并没有完全的实现,因为在整个在整体的实际里面,依然会提供有application.yml配置文件,那么如果在微服务的创建之中,那么一定会有成百上千个微服务的信息出现,于是这些配置文件的管理就成为了问题。例如:现在你突然有一天你的主机要进行机房的变更,所有的服务的IP地址都可能发生改变,这样对于程序的维护是非常不方便的,为了解决这样的问题,在SpringCloud设计的时候提供有一个SpringCloudConfig的程序组件,利用这个组件就可以直接基于GIT或者SVN来进行配置文件的管理。
在整体设计上SpringCloud更好的实现了RPC的架构设计,而且使用Rest作为通讯的基础,这一点是他的成功之处,由于大量的使用了netflix公司的产品技术,所以这些技术也有可靠的保证。
SpringBoot目录结构以Maven工程形式新建一个springboot项目。目录结构如下:
重点介绍resources目录:
在resources文件夹或与其并列的文件夹下建立public文件夹,在public文件夹下的html文件可以通过浏览器中输入文件+后缀名的方式直接访问的.??
一、public文件夹(需要自己手动新建),就相当于在eclipse的web项目中的WEB-INF文件夹外的文件,是不需要通过服务器内部进行访问的。
二、templates文件夹,是放置模板文件的,因此需要视图解析器来解析它。所以必须通过服务器内部进行访问,也就是要走控制器--服务--视图解析器这个流程才行。
三、static文件夹,既不能直接访问,也不能通过服务器访问到。因此,这个文件夹,可能是放一些css、图片这样的文件供服务器内部引用。
application.properties文件,全局配置文件。
才疏学浅之处,切莫在意。
????????????????????????????????????????????????????——2019.6.10?下午
SpringBoot项目目录结构
根目录:com.example.demo
1)启动类(gApplication.java)
????????推荐放在根目录com.example.demo包下
2)实体类(domain)
3)数据接口访问层(Dao)
4)数据服务接口层(Service)推荐:com.example.demo.service
5)数据服务实现层(ServiceImplements)推荐:com.example.demo.service.impl
????????使用idea的同学推荐使用com.example.demo.serviceImpl目录
6)前端控制器层(Controller)推荐:com.example.demo.controller
7)工具类库(utils)推荐:com.example.demo.utils
8)配置类(config)推荐:com.example.demo.config
9)数据传输对象(dto)推荐:com.example.demo.dto
10)视图包装对象(vo)推荐:com.example.demo.vo
根目录:resources
1)项目配置文件:resources/application.yml
2)静态资源目录:resources/static/
????????用于存放html、css、js、图片等资源
3)视图模板目录:resources/templates/
????????用于存放jsp、thymeleaf等模板文件
4)mybatis映射文件:resources/mapper/(mybatis项目)
5)mybatis配置文件:resources/mapper/config/(mybatis项目)