SpringBoot之基础

简介

背景

J2EE笨重的开发 / 繁多的配置 / 低下的开发效率 / 复杂的部署流程 / 第三方技术集成难度大

特点

① 快速创建独立运行的spring项目以及主流框架集成

② 使用嵌入式的Servlet容器, 应用无需达成war包

③ starters自动依赖和版本控制

④ 大量自动配置, 简化开发, 也可修改默认值

⑤ 无需配置xml文件, 无代码生成, 开箱即用

⑥ 准生产环境的运行时应用监控

⑦ 与云计算的天然集成

微服务

推荐martinfowler的一篇博客译文: http://blog.cuicc.com/blog/2015/07/22/microservices/

微服务是一种架构风格, 一个应用应该是一组小型服务, 可以通过http的方式进行互通.

以前的架构: 单体应用(ALL IN ONE)

微服务(Microservices): 每一个服务都是可替代可升级的软件单元

每个服务之间通过http进行通信:

准备工作

JDK1.8

maven3.3.9

IDEA_2018

配置指定maven的全局JDK版本: 在setting.xml文件中的<profiles></profiles>标签中

<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile>

第一个例子

① 创建一个maven工程(jar)

② 导入spring boot相关的依赖

<?xml version="1.0" encoding="UTF-8"?>
<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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.idea.springboot</groupId><artifactId>spring-boot-01-helloworld</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><!--将应用打包成一个可执行的jar包--><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

 ③ 编写一个主程序, 启动Spring Boot应用

/*** @Date 18/12/06/006 - 8:54* @Desc springboot第一个例子* @SpringBootApplication  标注一个主程序类 说明这是一个Spring Boot应用*/
@SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { //spring应用启动起来 SpringApplication.run(HelloWorldMainApplication.class, args); } }

④ 编写相关的Controller

@Controller
public class HelloController { @ResponseBody @RequestMapping("/hello") public String hello(){ return "Hello World!"; } }

⑤ 运行主程序测试, 访问: http://localhost:8080/hello

⑥ 简化部署(使用插件打成jar, 插件在pom文件中已给出)

探究

① pom文件

  父项目:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>

再依赖父项目:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.9.RELEASE</version><relativePath>../../spring-boot-dependencies</relativePath></parent>

管理Spring Boot的所有依赖版本: 导入依赖默认是不需要写上版本的(没有在dependencies管理中的除外)

 ② 导入的依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

spring-boot-starter: Spring Boot的场景启动器

spring-boot-starter-web: 帮我们导入了web模块正常运行所依赖的组件

Spring Boot将所有的功能场景都抽取出来, 做成一个个的starter(启动器), 只需要在项目中引入这些starter, 要用哪个功能就导入具体的starter即可.

③ 主程序类/主入口类

@SpringBootApplication注解, 该注解所标准的类即为SpringBoot的主配置类

    @SpringBootConfiguration

        @Configuration: 配置类上的注解

            @Component: 组件注解

                配置类: 同配置文件的作用, 也是容器的组件.

    @EbableAutoConfiguration: 开启自动注解功能

        @AutoConfigurationPackage: 自动配置包(自动导包)

            @Import({Registrar.class}): Spring的底层注解, 给容器中导入一个组件

        将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包的所有组件都扫描到容器中

        @Import({ AutoConfigurationImportSelector.class}): 导入具体组件的选择器

        将所有需要导入的组件以全类名的方式返回, 这些组件就会被添加到容器中.

        会给容器中导入非常多的自动配置类(xxxAutoConfiguration): 给容器中导入这个场景需要组件并配置好这些组件.

        有了自动配置类, 免去了手动编写配置注入功能组件的工作.

    SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, ClassLoader);

        该方法从文件"META-INF/spring.factories"中获取自动配置的类信息.

小结: SpringBoot在启动时从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值, 将这些值作为自动配置类导入到容器中, 自动配置类就会生效, 进行自动配置工作, 所以并不是不需要进行以前的配置, 只是这些配置都由SpringBoot帮我们完成了. J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar

使用Spring Initializr快速创建SpringBoot项目(需要联网)

① 选择Spring Initializr

② 填写信息

③ 需要哪个模块勾选哪个即可

④ next->finish

⑤ resources文件夹中的目录结构

    static文件夹: 保存所有的静态资源(js, css...);

    templates文件夹: 保存所有的模板页面(由于SpringBoot使用嵌入式的tomcat, 所以默认不支持jsp), 可以使用模板引擎                    (freemarker/ thymeleaf)

    application.properties: SpringBoot应用的配置文件(可以修改一些默认的设置)

转载于:https://www.cnblogs.com/MilkyWayGalaxy/p/10088817.html

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

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

相关文章

[Java核心技术(卷I)] - vscode手动编译运行继承类

参考 - P160~P161 主要有3个类: 一个测试类(ManagerTest)、一个子类(Manager)、一个父类(Employee) 注意点: -1. 使用 javac -d . *.java进行预编译 目录结构入下: 此时会生成目录结构如下: 之后运行 java com.inheritance.ManagerTest 附上几个类的代码 // com.inhe…

【Social Listening实战】当数据分析遭遇心理动力学:用户深层次的情感需求浮出水面...

本文转自知乎 作者&#xff1a;苏格兰折耳喵 ————————————————————————————————————————————————————— 本文篇幅较长&#xff0c;分为五部分&#xff0c;在中间部分有关于心理分析工具的介绍&#xff0c;案例分散在第二部…

Oracle 11g DG主库节点2 ORA-00245: control file backup fail

--节点1报错 Sun Dec 09 08:29:57 2018Control file backup creation failed: failure to open backup target file /u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_zwdb.ctl.Errors in file /u01/app/oracle/diag/rdbms/zwdb/zwdb2/trace/zwdb2_arc0_167660.trc:ORA-27037: …

hive字符函数

转载于:https://www.cnblogs.com/ggzhangxiaochao/p/9222732.html

[c++] - 简单的冒泡

#include <iostream> using namespace std;int main() {// 利用冒泡排序实现升序序列int arr[9] {4, 2, 8, 0, 5, 7, 1, 3, 9};cout << "排序前: " << endl;for (int i 0; i < 9; i){cout << arr[i] << " ";}cout <…

Markdown预览功能不可用解决方案

初学者在使用Markdown时也许会遇到这个问题 原因是电脑缺少一个组件&#xff0c;解决方案很简单&#xff0c;安装上就好了&#xff0c;以下是链接 http://markdownpad.com/download/awesomium_v1.6.6_sdk_win.exe转载于:https://www.cnblogs.com/j9oker/p/10092829.html

Linux 中yum的配置

1.进入yum的路径 cd /etc/yum.repos.d 2.将原始的repo文件移入一个新建的backup文件下做备份 mv CentOS* backup 3.在/etc/yum.repos.d下新建一个自己的文件(这里的文件必须以repo结尾); vi zhi.repo 其中&#xff0c;第一行必须是[文件名]的格式  是一个标记 name*** 这是一…

ccentos 7下安装php5.6并使用nginx + php-fpm部署多个不同端口网站

作为一个的勤杂工&#xff0c;近期因公司内部信息化的需求&#xff0c;给新进员工提供基础的知识培训和介绍&#xff0c;也为了给公司内部建立一个沟通交流的平台&#xff0c;百度找了开源的百科系统HDwiki和开源的问答系统Tipask问答系统&#xff0c;蛋痛的这两套系统均是phpm…

JS ajax请求参数格式( formData 、serialize)

1 $("#importBtn").click(function(){2 if($("#conId").val() ""){3 alert("请填写Id");4 return;5 }6 if($("#fromWhere").val() "…

【小工具分享】 - vscode注释自动生成

参考 关闭文件头部注释 点击设置 输入fileheader搜索 关闭头部注释 "fileheader.customMade" : {"autoAdd": false }

【算法】 - 滑动窗口

1. 题目链接 2. 分析 最多可以将K个值从0变成1,因此滑动窗口的限制条件: 0的数量(zeros)小于K,算法过程如下 有一个滑动窗口(slipper),每次都会从A中读入一个数当读入的数为0时,zeros当zeros的数量大于K时,会取出slipper首部的元素,当取值为0时zeros-- 总体代码如下: var lo…

Springboot整合thymeleaf模板

Thymeleaf是个XML/XHTML/HTML5模板引擎&#xff0c;可以用于Web与非Web应用。 Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式&#xff0c;因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码&#xff0…

【算法】 - 动态规划 + 位运算

题目描述 思路1: 写一个返回2进制中1数量的函数countOne遍历0到num,对每一个数使用countOne,并将结果保存到res中返回 var countBits function (num) {let res new Array(num 1).fill(0);for (let i 0; i < num; i) {res[i] countOne(i.toString(2));}return res; };…

content-type对照表

转载于:https://www.cnblogs.com/mxyr/p/9238329.html

数据结构开发(7):典型问题分析(Bugfix)

0.目录 1.创建异常对象时的空指针问题 2.LinkList 中的数据元素删除 3.LinkList 中遍历操作与删除操作的混合使用 4.StaticLinkList 中数据元素删除时的效率问题 5.StaticLinkList 是否需要提供析构函数&#xff1f; 6.StLib 是否有必要增加多维数组类&#xff1f; 1.创建异常对…

spring boot 使用视图modelandview

1&#xff1a;springboot使用视图解析器&#xff0c;添加依赖 <!-- freemarker模板引擎视图 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>&…

题解-BOI 2004 Sequence

Problem bzoj & Luogu 题目大意&#xff1a; 给定序列\(\{a_i\}\)&#xff0c;求一个严格递增序列\(\{b_i\}\)&#xff0c;使得\(\sum \bigl |a_i-b_i\bigr|\)最小 Thought 正序&#xff1a;直接对应 逆序&#xff1a;取中位数&#xff08;证明&#xff1a;“医院设置”&am…

【vscode】编译java时报错乱码

报错如下 解决方案 改变终端的编码格式 chcp 946注意: chcp 65001 UTF-8编码chcp 936 GBK2312代码页

搭建集群架构

环境搭建进行规划(磨刀不误砍柴工). 集群架构组成说明. 负载均衡服务器使用Nginx做搭建,(nginx反向代理软件) Nginx01<-------->Nginx02 3台Web网站服务器,Nginx网站web服务功能 2台负载均衡服务器 (对网站的流量进行分流,减少流量对某台服务器的压力) 3台web服务器, (处…

Model、ModelMap和ModelAndView的使用详解

1.前言 最近SSM框架开发web项目&#xff0c;用得比较火热。spring-MVC肯定用过&#xff0c;在请求处理方法可出现和返回的参数类型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;对于MVC框架&#xff0c;控制器Controller执行业务逻辑&#xff0c;用于产生模型数据…