全局配置文件操作

我们已经去构建了SpringBoot项目,在这个项目当中,与全局配置文件的一个讲解,虽然在之前,

讲解了SpringBoot的全局配置文件,那么咱们还有一些内容呢,没有讲到,我们再做一个补充,我们看全局配置文件

中的第一个内容,修改端口号,修改内嵌容器的端口号,回到我们的项目当中,其实我们知道,在我们的SpringBoot当中,

对于内嵌的Tomcat,默认的监听端口号是8080,在这里我们可以把我们的项目启动一下,看一下控制台输出的监听的端口号

端口,端口号是多少,我们项目启动完毕以后呢,他默认的监听的端口号是8080,比如我现在想把端口号改成8888,该怎么去做呢,

回到我们的全局配置文件当中,在这里我们只需要添加一个键值对就可以了

server.port=8888

那这个我们要注意的就是,key必须要交server.port,因为springboot在解析的时候,他要去解析这个配置文件,在全局配置文件

当中,他发现有server.port了,他知道你要修改服务的端口号,所以这是不能随便取的一个key,就叫server.port,下面我们再

启动一下我们的项目,我们看一下控制台输出,现在是不是变成了8888了

Tomcat started on port(s): 8888 (http)

那么也就是说我们修改端口也是成功的,这个也就是SpringBoot当中,修改端口号的一个方式,接下来我们再看一下,我们可以在

SpringBoot的全局配置文件当中,除了修改端口号以外,还可以做什么呢,比如完成自定义属性的=配置,那么其实自定义属性配置,

已经讲过了,这个叫法大家听着挺陌生的,这个名这么叫也没有问题,什么意思呢,比如我现在要在配置文件里,key跟value,这个value

呢,他将作为一个配置项,未来会注入到我的代码当中,如果我想有这样的一个设计的话,有这样的一个需求的话,我该怎么去实现呢,

很简单,比如我这里有一个msg,然后后面给一个value,就叫Hello World,现在我就要把msg所对应的value通过一定的方式,注入到我的

代码当中,我们来看一下这怎么做,首先我添加一个key和value,然后我们去创建一个Controller,然后这个名字

叫HelloWorldController,然后在这个Controller当中,我们先去用一个@RestController,这个注解大家应该知道是

什么意思了,也就是以JSON格式来返回了,然后再加一个@RequestMapping,将一个URL绑定到一个方法上,我就叫hello,

然后定义一个方法返回String,叫showMsg,然后这个方法写完了,在我的这个Controller当中呢,我有一个成员变量,

String类型的,就叫msg,在这里我return这个msg,将他的信息返回,然后我要把key的valule

注入到这里,用一个@Value的注解,然后写一个类似EL表达式的语法,把我们的key填进来,这样就可以了

@RestController
public class HelloWorldController {
	
	@Value("${msg}")
	private String msg;

	@RequestMapping("/hello")
	public String showMsg(){
		return this.msg;
	}
}

我们启动一下,看能不能得到我们想要的结果,我们观察控制台,监听的端口是8888,打开浏览器我们来访问一下

http://localhost:8888/hello

我们可以看到,信息是可以拿到的,这种方式我们也可以称之为自定义属性配置,这个是配置文件里的值

msg=Hello World

这是在配置文件当中,自定义属性的方式,去获取里面的信息,接下来我们再来看,配置变量引用,在配置文件当中呢,

去完成一个配置变量应用,我们来看一下

比如我现在还有一个key,我在上边定义,叫什么都行,我们叫hello,然后我这里也有一个值,这个值我叫China,

hello=China

然后我的意思是这样的,现在我要将hello所对应的value,也就是China,放到我的msg当中,然后再把msg里面的值,

注入给我的Controller的msg属性,那怎么去做呢,我们可以这么去做,在这里我们通过一个EL表达式,类似于EL

表达式的语法,其实文件里也是这么写的,然后把我们的key放到这里,那么这个时候呢,springboot在解析配置

文件的时候,根据你的key把value取出来,拼到这个位置,接下来我们来验证一下,看看能不能达到,我们接下来再来访问,

刷新,看到了吗

localhost:8888/hello

这个值在配置文件当中,也已经被取出来了,并且拼到这里了,所以这种方式称之为配置变量的引用

然后是我们的代码,Controller里面的代码是没有变化的,这是在配置文件当中,完成配置变量引用,

我们再来看,在配置变量当中其实还可以做随机值配置,这是我们需要注意的是,我们有两种方式来讲解,

随机值,通过随机值的配置来配置随机值,第二个我们还可以完成随机端口的配置,配置随机端口,我们先来看一下,

其实这两个都是非常有用的,咱们来看一下配置随机值,这什么意思呢,打开我们的配置文件,比如我们在这里有一个

key叫num,然后这块我想给他产生一个随机数,配置文件当中给num产生一个随机数,那我应该怎么去做呢,这里我们还是用

一个${},里面写什么呢,其实用了springboot当中对于配置文件一个常量对象,叫random,然后在这个对象下,我们调用一个

方法,叫int,这个时候random对象就会给我们产生一个int的随机值,并且赋予了num,然后在这里呢,把num的值加到msg当中,

我们再来访问页面

num=${random.int}

请求这个Controller,看能不能拿到值,我们现在把项目重启一下

msg=Hello World ${hello} ${num}

我们看到了,是可以产生一个整数的随机数,有的人说为什么刷新没有变化呢,这就是我要说的一个点,我们的配置文件,

是不是只在启动时配置一次,那么只被解析一次,表示随机值产生的次数只产生一次,他不会随着你请求次数的变化,

而去改变随机值的,这就是我们需要注意的,这是我们在配置文件里,产生随机值需要注意的一个点,我们把它整理到笔记当中

其实无论是配置随机值也好,还是配置随机端口也好,在我们开发过程当中呢,还是比较有用的,

那我们说一下这里有什么用处,配置随机值,在程序中,如果有一些需要运算,如果一个运算需要随机值的

话,那么可以使用该方式,来生成,注意只生成一次,这是我们需要注意的,我们再来看,我们需要配置随机值的

方式呢,可以去配置随机端口,随机端口什么意思呢,我们现在给定的是一个固定端口,那我们其实也可以让他在每次

启动的时候呢,都拥有不同的端口,怎么去做呢,比较简单,还是用random来完成

server.port=${random.int[1024,9999]}

不同的是什么呢,我们的端口是不是要给他限定一个范围,你要随机生成,他已经超过我们操作系统所涵盖的范围了,

0到65535个端口,已经超了,那怎么办呢,这里可以用中括号来限定他的范围,比如我让他的端口范围在1024到9999之间,

其实就是一个正则表达式范围的限定,我们这么来给定以后呢,其实我们这个端口,他每次启动的时候,都会有变化的,

我们可以来测试一下,回到我们的启动类当中,我们去启动它,观察控制台,现在端口是4642

Tomcat started on port(s): 4642 (http)

我们把它关掉,我们再启动一次,再观察,是7609

Tomcat started on port(s): 7609 (http)

所以说这种方式呢,是设置我们随机端口的一种方式,配置我们的随机端口,那么这里我们还是说一下,配置随机端口,

配置随机端口在我们微服务开发,在微服务开发当中呢,也是比较有用的,他的用处我们一般用在哪儿呢,在SpringCloud

的微服务中,我们是不需要记录服务的IP和端口号的,那么我们也就不用去维护服务的端口号,让他随机生成就可以了,

如果你还要去维护这个端口号呢,是非常麻烦的,因为我们的未来的服务是非常多的,每个服务你都的指定一个端口号,

如果你要是忘记指定了,或者没有指定端口号,那么他就会出现端口抢占的问题,所以你还不如给他一个随机的端口号,

那么我们又讲解了一个随机端口配置的方式,我们主要是讲了配置,你像自定义属性配置我们之前说过,然后像配置随机值,

还有配置变量引用的方式,我们没有说过,还有端口号,其实当时没讲的原因是什么,涉及不到,只有讲微服务的时候,

才会涉及到随机端口的设置,所以在这里呢,把它做了一个补充,以上就是我们要讲的内容,主要是讲了全局配置文件的操作

<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>
  <groupId>com.learn</groupId>
  <artifactId>springboot-hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>springboot-hello</name>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.12.RELEASE</version>
  </parent>
  
	<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>
  <!-- springBoot的启动器 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
  </dependencies>

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

</project>
#server.port=8888
hello=China
num=${random.int}
#msg=Hello World ${hello}
msg=Hello World ${hello} ${num}
server.port=${random.int[1024,9999]}
package com.learn.springboothello.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {
	
	@Value("${msg}")
	private String msg;

	@RequestMapping("/hello")
	public String showMsg(){
		return this.msg;
	}
}

package com.learn.springboothello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootHelloApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootHelloApplication.class, args);
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值