SpringBoot随机数设置及参数间引用的操作步骤

自定义配置

SpringBoot免除了项目中大部分手动配置,可以说,几乎所有的配置都可以写在全局配置文件application.peroperties中,SpringBoot会自动加载全局配置文件从而免除我们手动加载的烦恼。但是,如果我们自定义了配置文件,那么SpringBoot是无法识别这些配置文件的,此时需要我们手动加载。

接下来,将针对SpringBoot的自定义配置文件及其加载方式进行讲解。

(1)使用@PropertySource加载配置文件

我们可以使用@PropertySource注解结合@Configuration注解配置类的方式来加载自定义配置文件,@PropertySource注解用于指定自定义配置文件的具体位置和名称。同时,为了保证SpringBoot能够扫描该注解,还需要在类上添加@Configuration注解将实体类作为自定义配置类。

如果需要将自定义配置文件中的属性值注入到对应类的属性中,可以使用@ConfigurationProperties注解或者@Value注解进行属性值注入。

操作步骤:

1、在SpringBoot项目的resources目录下新建一个名为test.properties的自定义配置文件,在该配置文件中编写需要设置的配置属性:

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

2、在com.hardy.springboot_demo.pojo包下新建一个配置类MyProperties,提供test.properties自定义配置文件中对应的属性,并根据@PropertySource注解的使用进行相关的配置:

package com.hardy.springboot_demo.pojo;

/**
 * @Author: HardyYao
 * @Date: 2021/5/31
 */

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@Configuration // 自定义配置类
@PropertySource("classpath:test.properties") // 指定自定义配置文件的文件位置和文件名称
@EnableConfigurationProperties(MyProperties.class) // 开启对应配置类的属性注入功能
@ConfigurationProperties(prefix = "test") // 指定配置文件注入属性前缀
public class MyProperties {

    private int id;

    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyProperties{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

这里主要是新建一个自定义配置类,通过相关注解引入了自定义的配置文件,并完成了自定义属性值的注入。

针对上述的几个注解,进行逐一讲解:

  • @Configuration注解表示当前类是一个自定义配置类,并添加为Spring容器的组件,这里也可以使用传统的@Component注解实现相同的功能;
  • @PropertySource("classpath:test.properties")注解指定了定义配置文件的文件位置和文件名称,此处表示自定义配置文件为classpath类路径下的test.properties文件;
  • @ConfigurationProperties(prefix = "test")将上述自定义配置文件test.properties中以test开头的属性值注入到该配置类属性中;
  • 如果配置类上使用的是@Component注解而非@Configuration注解,那么@EnableConfigurationProperties注解还可以省略。

3、编写测试方法进行测试:

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

测试结果:

(2)使用@Configuration编写自定义配置类

在SpringBoot框架中,推荐使用配置类的方式向容器中添加和配置组件。

在SpringBoot框架中,通常使用@Configuration注解定义一个配置类,SpringBoot会自动扫描和识别配置类,从而替换传统Spring框架中的XML配置文件。

当自定义一个配置类后,还需要在类中的方法上加上@Bean注解进行组件配置,将方法的返回对象注入到Spring容器中,并且组件名称默认使用的是方法名,当然也可以使用@Bean注解的name或value属性自定义组件的名称。

操作步骤:

1、在com.hardy.springboot_demo包下新建一个config包,并在该包下新建一个MyService类,该类中不需要写任何代码:

package com.hardy.springboot_demo.config;

/**
 * @Author: HardyYao
 * @Date: 2021/5/31
 */
public class MyService {
}

由于该类目前没有任何配置和注解,因此还无法正常被SpringBoot扫描和识别。

2、在config包下,新建一个MyConfig类,并使用@Configuration注解将该类声明为一个配置类,该类的内容如下:

package com.hardy.springboot_demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Author: HardyYao
 * @Date: 2021/5/31
 */
@Configuration // 定义该类为一个配置类
public class MyConfig {

    /**
     * 将返回值对象作为组件添加到Spring容器中,该组件id默认为方法名
     * @return
     */
    @Bean
    public MyService myService(){
        return new MyService();
    }

}

MyConfig是@Configuration注解声明的配置类(类似于声明了一个XML配置文件),该配置类会被SpringBoot自动扫描识别。

使用@Bean注解的myService()方法,其返回值对象会作为组件添加到Spring容器中(类似于XML配置文件中的标签配置),并且该组件id默认为方法名myService。

3、编写测试方法进行测试

@Autowired
private ApplicationContext applicationContext;

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

上述代码中,先通过@Autowired注解注入Spring容器示例ApplicationContext,然后在测试方法iocTest()中测试查看该容器中是否包含id为myService的组件。

执行测试方法iocTest(),运行结果如下:

从测试结果可以看出,测试方法iocTest()运行成功,显示运行结果为true,表示Spirng的IOC容器中也包含了id为myService的实例对象组件,说明使用自定义配置类的形式完成了向Spring容器进行组件的添加和配置。

随机数设置及参数间引用

在SpringBoot配置文件中设置属性时,除了可以像前面示例中显示的配置属性值外,还可以使用随机值和参数间引用对属性值进行设置。下面,针对配置文件中这两种属性值的设置方式进行讲解。

随机值设置

在SpringBoot配置文件中,随机值设置使用到了SpringBoot内嵌的RandomValuePropertySource类,对一些隐秘属性值或者测试用例属性值进行随机值注入。

随机值设置的语法格式为${random.xx},xx表示需要制定生成的随机数类型和范围,它可以生成随机的整数、uuid或字符串,示例代码如下:

my.secret=${random.value} // 配置随机值
my.number=${random.int} // 配置随机整数
my.bignumber=${random.long} // 配置随机long类型数
my.uuid=${random.uuid} // 配置随机uuid类型数
my.number.less.than.ten=${random.int(10)} // 配置小于10的随机整数
my.number.in.range=${random.int[1024,65536]} // 配置范围在[1024,65536]之间的随机整数

上述代码中,使用RandomValuePropertySource类中random提供的随机数类型,分别展示了不同类型随机值的设置示例。

参数间引用

在SpringBoot配置文件中,配置文件的属性值还可以进行参数间的引用,也就是在后一个配置的属性值中直接引用先前定义过的属性,这样就可以直接解析其中的属性值了。

使用参数间引用的好处就是,在多个具有相互关联的配置属性中,只需要对其中一处属性进行预先配置,那么其他地方都可以引用,省去了后续多处修改的麻烦。

参数间引用的语法格式为${xx},xx表示先前在配置文件中已经配置过的属性名,示例代码如下:

app.name=MyApp
app.description=${app.name} is a Spring Boot application

上述参数间引用设置示例中,先设置了“app.name=MyApp”,将app.name属性的属性值设置为了MyApp;接着,在app.description属性配置中,使用${app.name}对前一个属性进行了引用。

接下来,通过一个案例来演示使用随机值设置以及参数间引用的方式进行属性设置的具体使用和效果,具体步骤如下:

1、打开全局配置文件application.properties,在该配置文件中分别通过随机值设置和参数间引用来配置两个属性,示例代码如下:

# 随机值设置以及参数间引用配置
hardy.age=${random.int[20,30]}
hardy.description=hardy的年龄可能是${hardy.age}

在上述application.properties配置文件中,先使用随机数设置了hardy.age的属性值,该属性值的取值范围在[10,20]之间,随后使用参数间引用配置了hardy.description属性。

2、在项目的测试类中添加description属性,并将配置文件中hardy.description的属性进行注入,然后新增一个测试方法进行测试,测试代码如下:

@Value("${hardy.description}")
private String description;

@Test
void placeholderTest() {
    System.out.println(description);
}

在上述代码中,通过@Value("${hardy.description}")注解将配置文件中的hardy.description属性值注入到了对应的description属性中,在测试方法placeholderTest()中对该属性值进行了输出打印。

执行测试方法后,控制台输出结果如下所示:

可以看到,测试方法placeholderTest()成功打印出了description属性的注入内容(age的取值始终在[20,30]之间随机显示),该内容与配置文件中配置的属性值保持一致。

以上就是SpringBoot随机数设置及参数间引用的配置方法的详细内容,更多关于SpringBoot参数间引用随机数设置的资料请关注我们其它相关文章!

(0)

相关推荐

  • 在SpringBoot下读取自定义properties配置文件的方法

    SpringBoot工程默认读取application.properties配置文件.如果需要自定义properties文件,如何读取呢? 一.在resource中新建.properties文件 在resource目录下新建一个config文件夹,然后新建一个.properties文件放在该文件夹下.如图remote.properties所示 二.编写配置文件 remote.uploadFilesUrl=/resource/files/ remote.uploadPicUrl=/resource

  • springboot实现yml里的自定义配置方法

    主要介绍三种,字符串配置,数组配置和带默认值的配置 ◆字符串配置 //yml setString: hello /** * 字符串. */ @Value("${setString}") String setString; ◆数组配置 //yml setArray: -http://www.taobao.com -http://www.tmall.com /** * 数组. */ @Value("${setArray}") String[] setArray; ◆带默

  • Springboot读取配置文件及自定义配置文件的方法

    1.创建maven工程,在pom文件中添加依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency

  • spring boot使用自定义配置的线程池执行Async异步任务

    在前面的博客中,http://www.jb51.net/article/106718.htm 我们使用了spring boot的异步操作,当时,我们使用的是默认的线程池,但是,如果我们想根据项目来定制自己的线程池了,下面就来说说,如何定制线程池! 一.增加配置属性类 package com.chhliu.springboot.async.configuration; import org.springframework.boot.context.properties.ConfigurationP

  • Spring Boot 配置随机数的技巧代码详解

    Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位MD5字符串 user.random.secret=${random.value} #随机int数字 user.random.intNumber=${random.int} #随机long数字 user.random.longNumber=${random.long} #随便uuid user.random.uuid=${random.uuid} #随机1

  • Spring Boot自定义配置属性源(PropertySource)

    配置覆盖优于profile 在生产实践中,配置覆盖是解决不同环境不同配置的常用方法.比如用生产服务器上的配置文件覆盖包内的文件,或者使用中心化的配置服务来覆盖默认的业务配置. 相比于profile机制(比如maven的profile.spring boot的profile-specific properties),即不同环境使用不同的配置文件,覆盖的方式更有优势.程序员在开发时不需要关心生产环境数据库的地址.账号等信息,一次构建即可在不同环境中运行,而profile机制需要将生产环境的配置写到项

  • SpringBoot随机数设置及参数间引用的操作步骤

    自定义配置 SpringBoot免除了项目中大部分手动配置,可以说,几乎所有的配置都可以写在全局配置文件application.peroperties中,SpringBoot会自动加载全局配置文件从而免除我们手动加载的烦恼.但是,如果我们自定义了配置文件,那么SpringBoot是无法识别这些配置文件的,此时需要我们手动加载. 接下来,将针对SpringBoot的自定义配置文件及其加载方式进行讲解. (1)使用@PropertySource加载配置文件 我们可以使用@PropertySource

  • SpringBoot 设置传入参数非必要的操作

    我就废话不多说了,大家还是直接看代码吧~ 设置参数是否为必要参数 @RequestParam(required = false) 补充:SpringBoot 开发案例之参数传递的正确姿势 前言 开发这么多年,肯定还有不少小伙伴搞不清各种类型的参数是如何传递的,很多同学都是拿来即用,复制粘贴一把撸,遇到问题还是一脸懵逼. 姿势 学习参数传递的正确姿势,先说怎么做,再说为什么,本质上还是复制粘贴一把撸,问题是你想问不想问为什么! 传递 用户登录 前端代码: var param = { "userna

  • 详解springboot设置默认参数Springboot.setDefaultProperties(map)不生效解决

    我们都知道springboot 由于内置tomcat(中间件)直接用启动类就可以启动了. 而且我们有时想代码给程序设置一些默认参数,所以使用方法Springboot.setDefaultProperties(map) SpringApplication application = new SpringApplication(startClass); // Map<String, Object> params = new HashMap<>(); params.put("l

  • SpringBoot接口接收json参数解析

    目录 SpringBoot接口接收json参数 前言 前提 一.GET 二.DELETE 三.POST/PUT/PATCH Springboot restFul 参数检验 概述 常用注解 简单应用举例 自定义校验 抛出BindException而非MethodArgumentNotValidException SpringBoot接口接收json参数 前言 通常来讲,HTTP 方法会映射为 CRUD 动作,但这并不是严格的限制,有时候 PUT 也可以用来创建新的资源,POST 也可以用来更新资源

  • SpringBoot请求处理之常用参数注解介绍与源码分析

    目录 1.注解 2.注解生效相关源码分析 3.Servlet API 4.复杂参数 5.自定义参数 6.类型转换器Converters 1.注解 @PathVariable:将请求url中的占位符参数与控制器方法入参绑定起来(Rest风格请求) @RequestHeader:获取请求头中的参数,通过指定参数 value 的值来获取请求头中指定的参数值 @ModelAttribute:两种用法 用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,

  • 浅谈安装ORACLE时在Linux上设置内核参数的含义

    前两天看到一篇Redhat官方的Oracle安装文档,对于Linux内核参数的修改描述的非常清晰. 安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其中最主要的是和内存相关的参数设置. SHMMAX参数:Linux进程可以分配的单独共享内存段的最大值.一般设置为内存总大小的一半.这个值的设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,因此对于安装Oracle数据库的系统,shmmax的值应该比内存的二分之一大一些

  • springboot获取URL请求参数的多种方式

    1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交. /** * 1.直接把表单的参数写在Controller相应的方法的形参中 * @param username * @param password * @return */ @RequestMapping("/addUser1") public String addUser1(String username,String password) { System.out.pri

  • 解决Springboot get请求是参数过长的情况

    问题原因 Springboot get请求是参数过长抛出异常:Request header is too large 的问题 错误描述 java.lang.IllegalArgumentException: Request header is too large 解决方案 请求头超过了tomcat的限值.本来post请求是没有参数大小限制,但是服务器有自己的默认大小. 设置服务器大小: 1.普通tomcat 在server.xml中 <Connector connectionTimeout=&quo

  • SpringBoot使用validation做参数校验的实现步骤

    1.添加依赖 直接添加 hibernate-validator <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.2.Final</version> </dependency> 添加spring-boot-starter-validat

  • SpringBoot使用validation做参数校验说明

    目录 1.添加依赖 直接添加 hibernate-validator 添加spring-boot-starter-validation 添加spring-boot-starter-web 2. 配置文件 3.统一异常处理 4.使用 1.添加依赖 直接添加 hibernate-validator <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-valid

随机推荐