企业开发框架SpringBoot——01入门与数据访问

目录

什么是SpringBoot。

SpringBoot与微服务

hello world 

SpringBoot装配原理

SpringBoot热部署

运行与发布 

 配置文件

 多环境配置文件激活(重要)

配置属性扩展

配置文件属性值的注入

方式一:使用@ConfigurationProperties注入属性

方式二:使用@Value注入属性

两种注解的对比分析​​​​​​​

 Spring Boot自定义配置

方式一:使用@PropertySource加载配置文件 

方式二:使用@ImportResource加载XML配置文件

 静态资源

SpringBoot - 设置项目默认的首页(欢迎页)

一、使用 index.html 作为首页面

1,静态首页

2,动态首页

 二、使用非 index.html 的文件作为首页面

1,静态首页

2,动态首页


什么是SpringBoot。

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。简而言之,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。

SpringBoot与微服务

微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,它们之间通过 HTTP 协议进行通信(也可以采用消息队列来通信,如 RoocketMQ,Kafaka 等),可以采用不同的编程语言,使用不同的存储技术,自动化部署(如 Jenkins)减少人为控制,降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理。例如 Eureka,Zookeeper 等都是比较常见的服务集中化管理框架。

微服务的开发思想是目前大项目的主流开发模式,spring boot 为微服务的开发思想提供相关技术手段,spring cloud 为微服务的统一管理提供技术手段。

hello world 

使用 IDEA 来创建一个项目工程。如果是第一次打开 IDEA,可以选择 Create New Project 创建一个新工程。如果已经打开了 IDEA,在 File 菜单中选择 New Project,也能打开 New Project 对话框,使用 IDEA 创建一个 Spring Initializr 创建一个新项目。

注意:Intializr Service URL 为 https://start.sprig.io。IDEA 将会需要连接网络,以查询 Spring Boot 的当前可用版本和组件列表,最近该网址对国内不开放,可以使用阿里的 https://start.aliyun.com/ 地址,使用这种方式新建项目大体上也需要三个步骤。 

1.选择类型

可以使用默认选项,注意 Type 为 Maven Project,Java Version 为 8,Packaging 为 Jar 或 war。单击 Next 进入下一步。

2.选择 Spring Boot 版本和组件

选择 Spring Boot 版本和 Spring Boot 组件,例如,在 Spring Boot Version 中选择 2.5.4 并勾选 Spring Web 项目组件,然后单击 Next 进入下一步。

3.输入项目名称

选择存放路径后输人项目名称,并选择项目存放路径,这里使用 helloworld 作为项目的名称。

单击 Finish,将创建一个初始化项目。这个项目不但有完整的目录结构,还有一个完整的 Maven 配置,并且生成了一个默认的主程序,几乎所有的准备工作都已经就绪,并且可以立即运行起来(虽然没有提供任何可用的服务)。这也是 Spring Boot 引以为傲的地方,即创建一个应用可以不用编写任何代码,只管运行即可。

maven 相关的依赖:

使用 Maven,通过导人 Spring Boot 的 starter 模块,可以将许多程序依赖包自动导人工程中。使用 Maven 的 parent POM,还可以更容易地管理依赖的版本和使用默的配置,工程中的模块也可以很方便地继承它。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.4</version>
    <relativePath/>
</parent>

这里只使用了一个依赖配置 spring-boot starter-web 和一个 parent 配置 spring-boot-sarter-parent,在工程的外部库(External Libraries)列表中,它将自动引人 springframework 依赖,以及 autoconfigure、logging、 slf4j、 jackson、tomcat 插件等,所有这些都是一个 Web 项目可能需要用到的东西(包括你已经考虑到的和没有考虑到的)。

Spring Boot 的官方文档中提供了一个最简单的 Web 实例程序,这个实例只使用了几行代码。虽然简单,但实际上这已经可以算作是一个完整的 Web 项目了。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("/")
    public String hello() {
        System.out.println("hello world!");
        return "hello world!!";
    }
}

这个简单实例,首先是一个 Spring Boot 应用的程序人口,或者叫作主程序,其中使用了一个注解 @SpringBootApplication 来标注它是一个 Spring Boot 应用,main 方法使它成为一个主程序,目的是将在应用启动,在控制台可以看到如下日志表明项目启动成功。

Tomcat started on port(s): 8080 (http) with context path ''
Started DemoApplication in 3.941 seconds (JVM running for 8.812)

从上面的输出中可以看出,Tomcat 默认开启了 8080 端口。要访问这个应用提供的服务,可以在浏览器的地址栏中输人 http://localhost:8080 这样就可以看到我们期望的输出字符:hello world !! 。

其次,HelloController上的注解 @RestController 标注这个程序还是一个控制器,如果在浏览器中访问应用的根目录,它将调用 hello 方法,并输出字符串:  hello world ! ,返回前端字符串 hello world !!

SpringBoot装配原理

  见SpringBoot企业级开发教程(黑马程序员/编著) 第19页

SpringBoot热部署

  搭建步骤:

  1.在pom文件中添加spring-boot-devtools热部署依赖

  2.IDEA中热部署设置

  3.热部署测试

① 在pom文件中添加spring-boot-devtools热部署依赖

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

②  IDEA中热部署设

选择【File】→【Settings】选项,打开Compiler面板设置页。

 

 使用快捷键“Ctrl+Shift+Alt+/”打开Maintenance选项框,选中并打开Registry页面。

 ③ 热部署测试

启动项目,通过浏览器访问http://localhost:8080/hello

 修改类HelloController中的请求处理方法hello()的返回值,刷新浏览器。

运行与发布 

在 idea 创建的项目依赖中可以看到如下打包插件,使用该插件可以将 springboot 项目快速打包发布。

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
</plugins>

 在配置了 spring-boot-maven-plugin 插件后,idea 的面板中多出相关的打包指令,双击 package 即可将项目打包。由于打包过程会测试相关的单元测试,可以点击跳过测试。

当控制台输出:BUILD SUCCESS 时,表示项目已经成功打好对应的项目包。这时在 target 目录下便是对应的项目包。

最后通过 java -jar 命令即可运行当前应用

java -jar demo-0.0.1-SNAPSHOT.jar

 当需要覆盖配置文件中的一些属性时通常使用--加内容,如:

java -jar demo-0.0.1-SNAPSHOT.jar --server.port=1234

 配置文件

关于 SpringBoot 配置,可以在工程的 resources 文件夹中创建一个 application.properties 或 aplication.yml 文件,这个文件会被发布在 classpath 中,并且被 Spring Boot 自动读取。这里推荐使用 application.yml 文件,因为它使用 yaml 的语法规则,提供了结构化及其嵌套的格式。例如,可以按如下所示配置上面的工程,将默认端口改为 80,并且将 Tomcat 的字符集定义为 UTF-8。

server:
  port: 80
  tomcat:
    uri-encoding: utf-8

如果要使用 application.properties 文件,上面的配置就要改成如下所示的样子,其结果完全相同。 

server.port=80
server.tomcat.uri-encoding=utf-8

使用这个配置文件可以直接使用 Spring Boot 预定义的一些配置参数,关于其他配置参数的详细说明和描述在后面详细介绍。 

yaml 语法:

  1. 缩进 yaml 使用一个固定的缩进风格表示数据层结构关系,Saltstack 需要每个缩进级别由两个空格组成。一定不能使用 tab 键
  2. 冒号 yaml: mykey: my_value 每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)

map 对象书写示例

friends:
  lastName: zhangsan
  age: 20

 行内写法

friends: {lastName: zhangsan,age: 18}

 多环境配置文件激活(重要)

在实际开发过程中,配置文件一般分为开发模式(dev)和生产模式(pro),为了快速切换配置文件,springboot 提供了配置文件快速激活方案。即在application.properties 加入 spring.profiles.active=dev,即可以引用同目录下文件名为 application-dev.properties/yml 的配置文件。

当然如果只想使用一个配置文件解决两种模式配置的切换也是可以的。如下则为单文件多 profile 模式:

application.yml

spring:
  profiles:
    active: pro

application-dev.yml

server:
  port: 8080

application-pro.yml

server:
  port: 80

通过简单的一行配置即可改变配置文件的全部内容,将极大的方便项目部署到 linux 系统上时修改配置文件。

配置属性扩展

为了满足各种业务需要,springboot 对 spring 的配置属性进行了大量的扩展,方便开发中获取自定义属性、随机数、变量引用等。在配置文件 application.properties 中加入如下代码:

com.didispace.blog.name=程序猿
com.didispace.blog.title=Spring Boot教程
com.didispace.blog.desc=${com.didispace.blog.name}正在努力写《${com.didispace.blog.title}》

# 随机字符串
com.didispace.blog.value=${random.value}
# 随机int
com.didispace.blog.number=${random.int}
# 随机long
com.didispace.blog.bignumber=${random.long}
# 10以内的随机数
com.didispace.blog.test1=${random.int(10)}
# 10-20的随机数
com.didispace.blog.test2=${random.int[10,20]}

在启动程序的下级目录添加spring管理的一个bean

@Value("${com.didispace.blog.name}")
private String name;
@Value("${com.didispace.blog.title}")
private String title;
@Value("${com.didispace.blog.desc}")
private String desc;
@Value("${com.didispace.blog.value}")
private String value;
@Value("${com.didispace.blog.number}")
private Integer number;
@Value("${com.didispace.blog.bignumber}")
private Long bignumber;
@Value("${com.didispace.blog.test1}")
private Integer test1;
@Value("${com.didispace.blog.test2}")
private Integer test2;

注:该方法值是SpingBoot应用程序启动时通过配置文件注入,是启动是注入,之后并不能修改,可以用来设置默认值,但如果要修改的话还是要通过自己在方法体内实现

配置文件属性值的注入

#application.yml
person:
  id: 2
  name: chen

方式一:使用@ConfigurationProperties注入属性

相关注解:@Component ,@ConfigurationProperties(prefix = “xxx”)

示例:将配置文件前缀为person的字段注入

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private int id;      
    public void setId(int id) {
        this.id = id;}
}

注意:使用@ConfigurationProperties注解批量注入属性值时,要保证配置文件中的属性与对应实体类的属性一致,否则无法正确获取并注入属性值。

方式二:使用@Value注入属性

相关注解:@Component,@Value

示例:

@Component
public class Person {
@Value("${person.id}")
    private int id;      
}

使用@Value注解对每一个属性注入设置,免去了属性setXX()方法

两种注解的对比分析

对比点

@ConfigurationProperties

@Value

底层框架

Spring Boot

Spring

功能

批量注入配置文件中的属性

单个注入

属性setXX()方法

需要

不需要

复杂类型属性注入

支持

不支持

松散绑定

支持

不支持

JSR303数据校验

支持

不支持

SpEL表达式

不支持

支持

 Spring Boot自定义配置

方式一:使用@PropertySource加载配置文件 

相关注解:@ PropertySource:指定自定义配置文件的位置和名称,

                  @ Configuration :自定义配置类,Spring容器组件 

示例:

test.properties

#对实体类对象MyProperties进行属性配置
test.id=110
test.name=test

MyProperties.class

@Configuration   
@PropertySource("classpath:test.properties
@EnableConfigurationProperties(MyProperties.class) 
@ConfigurationProperties(prefix = "test")
public class MyProperties {
}

测试:

@Autowired
private MyProperties myProperties;
@Test
public void myPropertiesTest() {
	System.out.println(myProperties);
}

方式二:使用@ImportResource加载XML配置文件

相关注解:  @ ImportResource:指定XML文件位置

示例

创建一个类MyService,该类中不需要编写任何代码。

public class MyService {
}

在resources目录下新建一个名为beans.xml的XML自定义配置文件,在该配置文件中通过配置向Spring容器中添加MyService类对象。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                      http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="myService" class="com.itheima.config.MyService" />
</beans>

项目启动类上添加@ImportResource注解来指定XML文件位置。

@ImportResource("classpath:beans.xml")

在测试类中引入ApplicationContext实体类Bean,并新增一个测试方法进行输出测试。

@Autowired
private ApplicationContext applicationContext;
@Test
public void iocTest() {
     System.out.println(applicationContext.containsBean("myService"));
}

 静态资源

springboot 项目微服务开发模式倡导使用前后端分离的开发模式,前端使用如 vue 脚手架等开发框架,开发完成后再打包前端项目到对应的 static 静态资源目录。

对于一般的开发人员来说,将普通 html,css,JavaScript 等资源放在 static 静态资源目录下开发也是一种不错的选择。使用 html 开发能加强对前端渲染的认识,为将来的前后端独立开发打下坚实基础。

一、默认静态资源映射

Spring Boot 对静态资源映射提供了默认配置,Spring Boot 默认将 /** 所有访问映射到以下目录:

classpath:/static
classpath:/public
classpath:/resources
classpath:/META-INF/resources

 如:在 resources目录下新建 public、resources、static 三个目录,并分别放入 a.jpg b.jpg c.jpg 图片。浏览器分别访问: http://localhost:8080/a.jpg http://localhost:8080/b.jpg http://localhost:8080/c.jpg 均能正常访问相应的图片资源。那么说明,Spring Boot 默认会挨个从 public、resources 和 static 里面找是否存在相应的资源,如果有则直接返回。

二、自定义静态资源访问

静态资源路径是指系统可以直接访问的路径,且路径下的所有文件均可被用户直接读取。 在 Springboot 中默认的静态资源路径有:classpath:/META-INF/resources/、classpath:/resources/、classpath:/static/ 和 classpath:/public/ 从这里可以看出这里的静态资源路径都是在 classpath 中(也就是在项目路径下指定的这几个文件夹) 试想这样一种情况:一个网站有文件上传文件的功能,如果被上传的文件放在上述的那些文件夹中会有怎样的后果? 网站数据与程序代码不能有效分离; 当项目被打包成一个 .jar 文件部署时,再将上传的文件放到这个 .jar 文件中是有多么低的效率; 网站数据的备份将会很痛苦。 此时可能最佳的解决办法是将静态资源路径设置到磁盘的基本个目录。

1、配置类

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //将所有C:/aa/ 访问都映射到/aa/** 路径下
        registry.addResourceHandler("/images/**").addResourceLocations("file:C:/images/");
    }
}

第二种方式

配置 application.yml 的 spring.web.resources.static-locations。这种方式与第一种方式不同之处在于该目录 images 不需要在请求时指定对应的路径前缀。

spring:
  web:
    resources:
      static-locations: classpath:/static/,classpath:/public/,file:${web.upload-path}
web:
  upload-path: C:/images/

注意:

web.upload-path:这个属于自定义的属性,指定了一个路径,注意要以 / 结尾;

spring.web.resources.static-locations:在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则 static、public 等这些路径将不能被当作静态资源路径,在这个最末尾的 file:${web.upload-path} 之所有要加 file:是因为指定的是一个具体的硬盘路径,其他的使用 classpath 指的是系统环境变量。

SpringBoot - 设置项目默认的首页(欢迎页)

一、使用 index.html 作为首页面

1,静态首页

Spring Boot 项目在启动后,首先回去静态资源路径(resources/static)下查找 index.html 作为首页文件。

2,动态首页

    如果在静态资源路径(resources/static)下找不到 index.html,则会到 resources/templates 目录下找 index.html(使用 Thymeleaf 模版)作为首页文件。

 二、使用非 index.html 的文件作为首页面

1,静态首页

(1)假设我们在 resources/static 目录下有个 login.html 文件,想让它作为首页。

(2)一种方式通过自定义一个 Controller 来进行转发:

@Controller
public class HelloController {
    @RequestMapping("/")
    public String hello(){
        return "forward:login.html";
    }
}

 (3)另一种方式是通过自定义一个 MVC 配置,并重写 addViewControllers 方法进行转发:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("forward:login.html");
    }
}

2,动态首页

(1)假设我们在 resources/templates 目录下有个 login.html 文件(使用 Thymeleaf 模版),想让它作为首页。 

(2)一种方式通过自定义一个 Controller 来实现,在 Controller 中返回逻辑视图名即可:

@Controller
public class HelloController {
     @RequestMapping("/")
     public String hello(){
         return "login";
     }
}

 (3)另一种方式是通过自定义一个 MVC 配置,并重写 addViewControllers 方法进行映射关系配置即可。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值