学习日志day67(2021-11-06)(1、SpringBoot入门 2、SpringBoot配置文件)

学习内容:学习SpringBoot(Day67)

1、SpringBoot入门
2、SpringBoot配置文件


1、SpringBoot入门

(1)Spring Boot 是 Spring 社区较新的一个项目。该项目的目的是帮助开发者更容易的创建
基于 Spring 的应用程序和服务,让更多人的人更快的对 Spring 进行入门体验,为 Spring 生态系统提供了一种固定的、约定优于配置风格的框架。

Spring Boot 具有如下特性:
1.为基于 Spring 的开发提供更快的入门体验
2.开箱即用,没有代码生成,也无需 XML 配置。同时也可以修改默认值来满足特 定的需求。
3.提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健
康检测、外部配置等。
4.Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

(2)创建 Maven 工程 springboot_demo,在 pom.xml 中添加如下依赖

<!--父依赖,相关的依赖jar包都会传递进来,版本也做了统一-->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.5.6</version>
  <relativePath />
</parent>

<dependencies>
  <!--引入web的场景启动器-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

(3)创建引导类,也就是启动类

//启动类
@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
    }
}

@SpringBootApplication其实就是以下三个注解的总和
@Configuration: 用于定义一个配置类
@EnableAutoConfiguration:Spring Boot 会自动根据你 jar 包的依赖来自动配置项目。
@ComponentScan: 告诉 Spring 哪个 packages 的用注解标识的类 会被 spring 自动扫描并 且装入 bean 容器。
范围:扫描启动类所在的包及其子包下所有的注解,如果不在同一个包下,就会报错,找不到,原因是因为扫描不到包。@SpringBootApplication(scanBasePackages = {"com.hisoft"})

(4)创建Controller类,实现 json 数据的输出。如果是在Spring中,需要配置xml文件才能实现,但是在SpringBoot中直接写Controller类就行。

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        return "hello SpringBoot";
    }
}

@RestController是一个组合注解:
@Controller,
@ResponseBody 用与返回字符串或json数据。

运行启动类,在浏览器地址栏输入 http://localhost:8080/hello 即可看到运行结果。

(5)@Configuration注解
创建一个HelloConfig类

@Configuration//标注配置类,相当于xml配置文件,可以把这个类注入到Bean管理
public class HelloConfig {

    @Bean//注入一个String对象,id是方法名getString
    public String getString(){
        return "Hello SpringBoot";
    }
}

创建一个Test类,自动注入Config类中配置的bean

@SpringBootTest
public class SpringBootApplicationTest {
    @Autowired
    @Qualifier(value = "getString")
    private String str;
    @Autowired
    private HelloConfig helloConfig;

    @Test
    void contextLoads() {
        System.out.println(str);//Hello SpringBoot
        System.out.println("string = " + helloConfig.getString());//string = Hello SpringBoot
    }
}

2、SpringBoot配置文件

(1)在 src/main/resources 下创建 application.properties 或者 更加简洁的application.yml或者application.yaml文件。
application.properties文件:

#端口号
server.port=8081
#上下文路径
server.servlet.context-path=/hello

(2)application.yml文件:YAML全称是YAML Ain’t Markup Language。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C+ +, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用.yml或者yaml。

YAML:基本语法
●大小写敏感
●数据值前边必须有空格,作为分隔符
●使用缩进表示层级关系
●缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)。
●缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
●#表示注释,从这个字符一直到行尾,都会被解析器忽略。

yaml是一种冒号,空格,换行的数据格式,后缀可以是yml,也可以是yaml。
如果两个application.properties和application.yml同时存在,优先加载application.properties,
优先级:properties>yml>yaml

server:
  port: 8082
  servlet:
    context-path: /hello

(3)yml数据格式:下一级要空两格,“ : ”和“ - ”后要空格

#自定义用户对象
user:
  name: zhangsan
  age: 20

#对象行内写法
user2: {name: lisi,age: 21}

#数组
address:
  - shanghai
  - beijing
  - guangzhou

#数组行内写法
address2: [zhengzhou,xian,taiyuan]

#纯量
msg1: 'hello \n world' #不会识别转义字符,会原样输出
msg2: "hello \n world" #会识别转义字符,分两行输出

#参数引用
name: lisi
person:
  name: ${name}
  age: 22
  address:
    - shanghai
    - beijing
    - guangzhou

(4)读取自定义配置文件信息
方式一:使用Environment对象

@Autowired
private Environment environment;
@Test
void Test() {
    String name = environment.getProperty("user.name");
    String name2 = environment.getProperty("user2.name");
    String address = environment.getProperty("address[0]");
    String msg1 = environment.getProperty("msg1");
    String msg2 = environment.getProperty("msg2");

    System.out.println("name=" + name);
    System.out.println("name2=" + name2);
    System.out.println("address[0]=" + address);
    System.out.println("msg1=" + msg1);
    System.out.println("msg2=" + msg2);
}

方式二:使用@Value注解

@Value("${person.name}")
private String name;
@Value("${address[0]}")
private String address;
@Value("${msg1}")
private String msg1;
@Value("${msg2}")
private String msg2;
@Test
public void EnvironmentTest2(){
    System.out.println("name=" + name);
    System.out.println("address[0]=" + address);
    System.out.println("msg1=" + msg1);
    System.out.println("msg2=" + msg2);
}

方式三:使用@ConfigurationPropertis注解:把配置信息和对象属性绑定起来
创建实体类

@Data
@ToString
@ConfigurationProperties(prefix = "person")//设置前缀为person
@Component
public class Person {
    private String name;
    private int age;
    private String[] address;
}

自定义配置信息

#参数引用
name: lisi
person:
  name: ${name}
  age: 22
  address:
    - shanghai
    - beijing
    - guangzhou

测试

@Autowired
private Person person;
@Test
public void ConfigurationPropertiesTest(){
    System.out.println(person);
}

Tip:红色提示框问题,需要注解处理器,添加依赖:

<!--配置处理器,在yml文件中自定义配置信息时会进行提示-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

之后重构项目,红色提示框就会消失。

(5)多环境配置文件
profile:
我们在开发SpringBoot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。

profile配置方式一:多profile文件方式
创建多个application.properties文件,application-dev.properties,application-online.properties,application-test.properties。
不同的配置文件使用不同的端口,如application-dev.properties中

#端口号
server.port=8081

这里springboot默认加载application.properties文件,需要在默认文件中把其他的配置文件进行激活

#激活指定环境
spring.profiles.active=test

如果激活的和默认配置文件配置信息相同,优化走激活。

profile配置方式二:yml多文档方式
用三个横杠隔开不同配置,每段内容是一个文档。

---
server:
  port: 8081

spring:
  config:
    activated:
      on-profile: dev
---
server:
  port: 8082

spring:
  config:
    activated:
      on-profile: online
---
server:
  port: 8083

spring:
  config:
    activated:
      on-profile: test
---
#激活指定环境
spring:
  config:
    active: dev

激活profile方式除了配置文件激活外,还有虚拟机参数激活和命令行参数激活两种方式:
虚拟机参数激活
在这里插入图片描述

命令行参数激活
在这里插入图片描述

项目打包后运行,也可以临时激活其它的配置文件。打开jar包所在目录,shift+右键 在此地打开powershell窗口。
在这里插入图片描述
如果提示没有主清单属性,可能是因为缺少插件,在添加了该插件之后,当运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“java -jar”命令就可以直接运行。这在很大程度上简化了应用的部署,只需要安装了 JRE 就可以运行。版本号要和SpringBoot一致

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

(6)配置加载顺序
内部配置加载顺序
Springboot程序启动时,会从以下位置加载配置文件:
1.fle…config/: 当前项目下的/config目录下
2.fle/: 当前项目的根目录
3.classpath:/config/:classpath(resource和Sources root下)的/config目录
4.classpath:/:classpath的根目录
加载顺序为:上文的排列顺序,高优先级配的属性会生效,多个配置文件效果是互补的。

外部配置加载顺序
加载外部配置文件:spring.config.location。如果配置文件在同一目录下会自动读取。放入config目录也会自动读取,而且优先级更高。
外部和内部配置互补,项目打包好后不用修改配置文件重新打包,只需要把要修改的配置写到外部文件即可。
在这里插入图片描述

(7)启动SpringBoot项目后会看到一个图案,这个团可以自定义的。
这个网站可以查找自己想要的艺术字https://www.bootschool.net/ascii-art/chinese
然后拷贝生成的字符到一个文本文件中,并且将该文件命名为banner.txt,将banner.txt拷贝到项目的resources目录中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值