在Spring 和 Spring Boot中使用配置属性

devtools/2024/9/23 14:31:17/

在Spring 和 Spring Boot中使用配置属性

      • 一、在spring中使用配置属性
        • 1.1 手动指定配置文件
        • 1.2 获取属性值
      • 二、在Spring Boot 中使用配置属性
        • 2.1 指定配置文件
        • 2.2 获取属性值
      • 总结

spring_1">一、在spring中使用配置属性

1.1 手动指定配置文件

spring 中使用@PropertySource注释选择属性文件,可以选择多个。

java">@Configuration
@PropertySource("classpath:foo.properties")
@PropertySource("classpath:bar.properties")
public class PropertiesWithJavaConfig {//...
}// 动态选择
@PropertySource({ "classpath:persistence-${envTarget:mysql}.properties"
})
...
1.2 获取属性值
java">// 使用@Value注入
@Value( "${jdbc.url}" )
private String jdbcUrl;// 使用@Value注入,带默认值
@Value( "${jdbc.url:aDefaultUrl}" ) 
private String jdbcUrl;// 使用Environment API获取
@Autowired
private Environment env;
...
dataSource.setUrl(env.getProperty("jdbc.url"));

二、在Spring Boot 中使用配置属性

2.1 指定配置文件
  • 默认文件

无特殊需要,不用指定配置文件,从默认位置加载。

src/main/resource目录下的application.properties,测试时使用src/test/resource目录。

  • 运行时在命令行中指定(一般用于生产环境,使用外部配置)
java -jar app.jar --spring.config.location=classpath:/another-location.properties-- 使用通配符指定多个文件
java -jar app.jar --spring.config.location=config/*/-- 使用命令行直接指定某个属性的值
java -jar app.jar --property="value"
  • 不同环境默认选择不同的配置文件

可以定义不同环境的配置文件,spring boot 会自动查找,例如application-dev.properties, application-test.properties。

  • 测试时,可以手动选择文件或指定属性值

测试的属性文件默认会在src/test/resource目录中查找,也可以自己选择使用@TextPropertySource。

java">@RunWith(SpringRunner.class)// 三种方式选择一种即可
// 方式一:使用@TestPropertySource选择文件
@TestPropertySource("/foo.properties")
// 方式二:不使用文件,直接指定某个名称和值
@TestPropertySource(properties = {"foo=bar"})
// 方式三:使用@SpringBootTest 的properties参数
@SpringBootTest( properties = {"foo=bar"}, classes = SpringBootPropertiesTestApplication.class)
public class FilePropertyInjectionUnitTest {@Value("${foo}")private String foo;@Testpublic void whenFilePropertyProvided_thenProperlyInjected() {assertThat(foo).isEqualTo("bar");}
}
2.2 获取属性值

spring类似,使用@Value注解、Environment API来获取属性的值,另外还可以通过@ConfigurationProperties注解将属性绑定到java对象中使用。

例如对于数据库属性,可以映射为java对象,在代码中使用。

database.url=jdbc:postgresql:/localhost:5432/instance
database.username=foo
database.password=bar

使用@ConfigurationProperties映射成java对象(需要在启动类上添加@ConfigurationPropertiesScan,会自动扫描并注册@ConfigurationProperties)

java">@ConfigurationProperties(prefix = "database")
public class Database {String url;String username;
@NotBlank// 属性上可以添加验证,这样配置的属性不符合要求时,会保IllegalStateException无法启动@NotBlank@Length(max = 4, min = 1)String password;// standard getters and setters
}// 可以在@Bean方法上使用@ConfigurationProperties,将属性绑定到Bean对象上(适用于第三方组件的对象)
@Configuration
public class ConfigProperties {@Bean@ConfigurationProperties(prefix = "item")public Item item() {return new Item();}
}// 上面是通过属性的setter方法注入的,也可以通过配置类的构造函数注入,此时属性都是final不可变的。
// 使用@ConstructorBinding绑定配饰熟悉感
@ConfigurationProperties(prefix = "mail.credentials")
public class ImmutableCredentials {private final String authMethod;private final String username;private final String password;// spring boot2.6以后,如果只有一个构造函数,可以省略注解@ConstructorBindingpublic ImmutableCredentials(String authMethod, String username, String password) {this.authMethod = authMethod;this.username = username;this.password = password;}public String getAuthMethod() {return authMethod;}public String getUsername() {return username;}public String getPassword() {return password;}
}

另外,spring boot支持使用YAML文件,后缀是.yaml、.yml,分层更直观

database:url: jdbc:postgresql:/localhost:5432/instanceusername: foopassword: bar
secret: foo

YMAL的优先级:外部文件会覆盖jar中的文件。

总结

Spring中使用配置属性,需要先通过@PropertySource指定属性文件,然后通过@Value或者Environment API获取属性值。
Spring Boot中使用配置属性,如果在默认位置,可以不用指定属性文件,然后也可以通过@Value或者Environment API获取属性值,另外支持通过@ConfigurationProperties将属性映射为java对象,方便使用。Spring Boot还提供了其他功能方便配置文件的使用。


http://www.ppmy.cn/devtools/103283.html

相关文章

深入浅出神经网络-学习小结

神经网络识别手写数字 基础知识 如何理解感知机 激活函数是阶跃函数的神经元 sigmoid作用 阶跃函数的升级,平滑了阶跃函数,阶跃函数不容易稳定,sigmoid克服了此缺点 多层感知机 可以理解为多层sigmoid激活函数神经元连接的网络 前馈神经…

游戏发行技术体系之SDK技术体系

在上篇文章中提现过,SDK主要分为充值、登录、合规、数据、聚合和后台管理。 下面是针对SDK技术体系进行拆分 这个地方没有写账号,是因为我会账号独立出来,这块会在后面的账号技术体系单独规划。

在手机在线预览3D模型,是如何实现的?

在手机在线预览3D模型,主要依赖于几个关键技术和步骤来实现。以下是一个概括性的流程: 一、模型上传 选择平台:首先,用户需要选择一个支持3D模型在线预览的平台,如51建模网、Sketchfab等。这些平台通常提供用户友好的…

案例分享—国外金融软件界面设计

国外金融软件界面设计追求简洁,旨在减少用户认知负担,通过直观布局与清晰信息架构,提升操作效率与用户体验 其简洁性还源于对金融数据精准呈现的重视,避免冗余元素干扰,确保用户快速获取关键信息,做出明智决…

8.21

1、roles(角色)介绍 roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独 的⽬录中,并可以便捷地调⽤它们的⼀种机制。 假设我们要写⼀个playbook来安装管理lamp环境,那么这个 playbook就会写很⻓。所以我们希望把这个很⼤的…

无人机之基本结构篇

无人机(Unmanned Aerial Vehicle, UAV)作为一种无人驾驶的飞行器,其基本结构涵盖了多个关键组件,这些组件共同协作以实现无人机的自主飞行和执行各种任务。以下是无人机基本结构的详细解析: 一、飞机平台系统 机身&am…

mysql数据库数据的批量插入

一、前言 在写sql语句的时候常常会有很多疑问,那就是当单表的数据量很大的时候,查询性能怎么样,以及索引对数据查询的影响,今天用navicat批量造了很多重复数据来对mysq在数据量大的时候查询的性能的测试。 1 、使用navicat批量插…

python 打包docker

python版本3.10 使用flask项目打包 1、 创建 requirements.txt 列出项目所安装依赖,如: flask statsmodels0.14.2 neuralprophet0.9.0 keras3.4.1 scikit-learn1.5.1 tensorflow 2、编写Dockerfile # 拉取基础镜像 FROM python:3.10# 镜像维护者的姓…