springboot配置文件使用方式
参数配置化
一些配置信息写在Java代码中,如果我们在做项目时每涉及到一个第三方技术服务,就将其参数硬编码,那么在Java程序中会存在两个问题:
- 如果这些参数发生变化了,就必须在源程序代码中改动这些参数,然后需要重新进行代码的编译,将Java代码编译成class字节码文件再重新运行程序。(比较繁琐)
- 如果我们开发的是一个真实的企业级项目, Java类可能会有很多,如果将这些参数分散的定义在各个Java类当中,我们要修改一个参数值,我们就需要在众多的Java代码当中来定位到对应的位置,再来修改参数,修改完毕之后再重新编译再运行。(参数配置过于分散,是不方便集中的管理和维护)
为了解决以上分析的问题,我们可以将参数配置在配置文件中。
如下:
#????? spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/tlias spring.datasource.username=root spring.datasource.password=mysql #??mybatis????? mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #???????? ? ?????????? mybatis.configuration.map-underscore-to-camel-case=true #配置单个文件最大上传大小 spring.servlet.multipart.max-file-size=10MB #配置单个请求最大上传大小(一次请求可以上传多个文件) spring.servlet.multipart.max-request-size=100MB #自定义的阿里云OSS配置信息 aliyun.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com aliyun.oss.accessKeyId=LTAI4GCH1vX6DKqJWxd6nEuW aliyun.oss.accessKeySecret=yBshYweHOpqDuhCArrVHwIiBKpyqSL aliyun.oss.bucketName=web-tlias
使用@Component
进行注解
使用@Value
注解用于外部配置的属性注入,具体用法为:
@Value("${配置文件中的key}")
@Component public class AliOSSUtils { @Value("${aliyun.oss.endpoint}") private String endpoint; @Value("${aliyun.oss.accessKeyId}") private String accessKeyId; @Value("${aliyun.oss.accessKeySecret}") private String accessKeySecret; @Value("${aliyun.oss.bucketName}") private String bucketName; //省略其他代码... }
@Value
不是lombok的包,而是spring包内。不要导错包
yml配置格式
SpringBoot提供了多种属性配置方式:
application.properties
:
server.port=8080 server.address=127.0.0.1
application.yml
:
server: port: 8080 address: 127.0.0.1
application.yaml
:
server: port: 8080 address: 127.0.0.1
XML
:
<server> <port>8080</port> <address>127.0.0.1</address> </server>
yml 格式的配置文件,后缀名有两种:
- yml (推荐)
- yaml
yml格式的数据有以下特点:
- 容易阅读
- 容易与脚本语言交互
- 以数据为核心,重数据轻格式
yml基本语法
- 大小写敏感
- 数值前边必须有空格,作为分隔符
- 使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea中会自动将Tab转换为空格)
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略
yml数据格式
对象/map集合:
user: name: Tom age: 20 address: beijing
数组/List/Set
hobby: - Java - C - Python
@ConfigurationProperties
Spring提供的简化方式套路:
1.需要创建一个实现类,且实体类中的属性名和配置文件当中key的名字必须要一致。比如:配置文件当中叫endpoints,实体类当中的属性也得叫endpoints,另外实体类当中的属性还需要提供 getter / setter方法
2.需要将实体类交给Spring的IOC容器管理,成为IOC容器当中的bean对象
3.在实体类上添加@ConfigurationProperties
注解,并通过perfect属性来指定配置参数项的前缀
AliOSSUtilsProperties.java
:
package com.intelligent_learning_aid_system.utils; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component @ConfigurationProperties(prefix = "aliyun.oss") public class AliOSSUtilsProperties { private String endpoint; private String accessKeyId; private String accessKeySecret; private String bucketName; }
AliOSSUtils.java
:
package com.intelligent_learning_aid_system.utils; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; import java.util.UUID; /** * 阿里云 OSS 工具类 */ @Component public class AliOSSUtils { @Autowired private AliOSSUtilsProperties aliOSSUtilsProperties; public String upload(MultipartFile file) throws IOException { // 获取配置文件中的值 String endpoint = aliOSSUtilsProperties.getEndpoint(); String accessKeyId = aliOSSUtilsProperties.getAccessKeyId(); String accessKeySecret = aliOSSUtilsProperties.getAccessKeySecret(); String bucketName = aliOSSUtilsProperties.getBucketName(); // 获取上传文件的 输入流 InputStream inputStream = file.getInputStream(); // 避免文件覆盖 String originalFilename = file.getOriginalFilename(); String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf(".")); // 上传到OSS OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); ossClient.putObject(bucketName, fileName, inputStream); //文件访问路径 String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName; // 关闭ossClient ossClient.shutdown(); return url;// 把上传到oss的路径返回 } }
这个警告提示是告知我们还需要引入一个依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
当我们在pom.xml文件当中配置了这项依赖之后,我们重新启动服务,大家就会看到在properties或者是yml配置文件当中,就会提示阿里云 OSS 相关的配置项。
所以这项依赖它的作用就是会自动的识别被@Configuration Properties
注解标识的bean对象。
Value和ConfigurationProperties区别
相同点:都是用来注入外部配置的属性的。
不同点:
- @Value注解只能一个一个的进行外部属性的注入。
- @ConfigurationProperties可以批量的将外部的属性配置注入到bean对象的属性中。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
jstl之map,list访问遍历以及el表达式map取值的实现
下面小编就为大家带来一篇jstl之map,list访问遍历以及el表达式map取值的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-03-03springboot+mybatis-plus+oracle实现逻辑删除
最近在做一个前后端分离的小项目,需要删除用户表的用户,本文主要实现了springboot+mybatis-plus+oracle逻辑删除,具有一定的参考价值,感兴趣的可以了解一下2021-08-08
最新评论