java:application.properties的详细使用以及区分环境

文章目录

    • 什么是application.properties文件?
    • 如何在Java中使用application.properties文件?
    • 将数据注入到 Bean 中
    • 使用自定义的配置文件
    • 使用命令行参数进行配置
    • 配置文件的优先级
    • 加载外部的配置文件
    • 多环境配置
      • 1、创建配置文件
      • 2、在 application.properties 中配置环境
      • 3、在项目启动时配置环境
    • 配置文件加密

什么是application.properties文件?

在Java开发中,配置文件是一个重要的部分,它允许我们灵活地调整程序的行为,而不需要修改源代码。在Spring Boot框架中,常用的配置文件是application.properties。本篇博客将介绍如何使用Java和application.properties配置文件。

application.properties是Spring Boot应用程序的默认属性文件。它包含了应用程序的各种配置信息,如数据库连接、日志级别、应用程序端口等等。这些配置信息可以在程序运行时被读取和使用。

如何在Java中使用application.properties文件?

在Java中使用application.properties文件有多种方式,其中最常用的方式是使用Spring Boot的@Value注解。以下是一个简单的例子:

package com.zhangyu.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("${info.app.name}")String appName;@RequestMapping("/hello")public String index(){return this.appName;}
}

application.properties

info.app.name=spring-boot-test

如果遇到乱码问题,可以在 setting 中配置
在这里插入图片描述

将数据注入到 Bean 中

有时候属性太多了,一个个绑定到属性字段上太麻烦,官方提倡绑定一个对象的 bean。

(1)首先我们创建一个名为 My 的 Bean,并将前面的配置数据注入到这个 Bean 中。

1、@ConfigurationProperties 中的 prefix 属性描述了要加载的配置文件的前缀。
2、Spring Boot 采用了一种宽松的规则来进行属性绑定:
假设 Bean 中的属性名为 authorName,那么配置文件中的属性可以是 my.author_name、my.author-name、my.authorName 或者 my.AUTHORNAME

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "my")
public class My {private String name;private String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}
}

(2)然后我们在 Controller 中引入这个 Bean 使用即可:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.GetMapping;@RestController
public class HelloController {@AutowiredMy my;@GetMapping("/hello")public String hello() {return my.getName() + " : " + my.getAge();}
}

使用自定义的配置文件

有时候我们不希望把所有配置都放在 application.properties 里面,这时候我们可以另外定义一个。

假设我们自定义的配置文件是 test.properties,放在 src/main/resources 下面。新建一个 bean 类后,通过如下方式将这个自定义的配置文件数据注入进来:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "my")
@PropertySource("classpath:test.properties")
public class My {private String name;private String age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}
}

使用命令行参数进行配置

(1)在命令行中通过 java -jar 命令启动项目时,可以使用连续的两个减号 – 对 application.properties 中的属性值进行赋值。
(2)比如下面命令修改 tomcat 端口号为 8081。其等价于在 application.properties 中添加属性 server.port=8081:
注意:如果 application.properties 中已经有同名属性,那么命令行属性会覆盖 application.properties 的属性。

java -jar xx.jar --server.port=8081

配置文件的优先级

(1)Spring Boot 项目中的 application.properties 配置文件一共可以出现在如下 4 个位置(优先级逐渐降低):

  • 项目根目录下的 config 文件夹
  • 项目根目录下
  • classpath 下的 config 文件夹
  • classpath 下

在这里插入图片描述

加载外部的配置文件

(1)项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定外部配置文件的位置。

java -jar xxx.jar --spring.config.location=/Volumes/BOOTCAMP/application.properties

(2)当然我们也可以指定外部配置所在的文件夹,启动时会搜索并使用该文件夹下的配置文件:

java -jar xxx.jar --spring.config.location=/Volumes/BOOTCAMP/

(3)我们还可以同时配置多个路径,比如下面样例先加载外部配置文件,如果不存在外部配置文件的话则使用包内默认的配置文件:

java -jar xxx.jar --spring.config.location=/Volumes/BOOTCAMP/application.properties,classpath:/,classpath:/config/

多环境配置

我们一般都会有多个应用环境,开发环境、测试环境、生产环境,各个环境的配置会略有不同,我可以根据这个创建多份配置文件,由主配置文件来控制读取那个子配置

1、创建配置文件

// {profile}是变量用于自定义配置文件名称
application-{profile}.properties

application-dev.properties

info.app.name=spring-boot-dev
info.app.version=1.0.0

application-test.properties

info.app.name=spring-boot-test
info.app.version=1.0.0

application-prod.properties

info.app.name=spring-boot-prod
info.app.version=1.0.0

2、在 application.properties 中配置环境

假设我们在 application.properties 中进行如下配置,则表示使用 application-dev.properties 配置文件启动项目。

spring.profiles.active=dev

3、在项目启动时配置环境

java -jar xxx.jar --spring.profiles.active=dev

配置文件加密

这个配置文件也用来存储敏感信息,如数据库凭据或其他机密信息。为了保护这些敏感信息,可以使用Spring Boot提供的加密特性对它们进行加密。

平时工作中,可能会使用配置中心来放敏感配置

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-crypto</artifactId>  
</dependency>

用这个,这里我简单讲一下流程
1、引入

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version>
</dependency>

2、加密

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="123456" password=zhangyu algorithm=PBEWithMD5AndDES
  • input :明文密码
  • password:要加的盐(可自己设置)
  • algorithm:加密算法,这里使用 PBEWithMD5AndDES

得到一个密文,放入配置文件中

datasource.password=ENC(加密后的密文)

3、使用

@RestController
public class DemoController {@Value("${datasource.password}")private String dataSourcePwd;@PostConstructpublic void init(){System.out.println("dataSourcePwd:"+dataSourcePwd);}}

https://zhuanlan.zhihu.com/p/531354051

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/201172.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ消息队列快速入门

RabbitMQ消息队列快速入门 初始MQ MQ全称为Message Queue&#xff0c;即消息队列&#xff0c;是在消息的传输过程中保存消息的容器。它是典型的生产者-消费者模型。 生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。消息的生产和消费都是异步的&am…

Windows本地搭建rtmp推流服务

前言 开发时偶尔需要使用rtmp直播流做视频流测试&#xff0c;苦于网上开源的rtmp视频流都已经失效&#xff0c;无奈只好尝试在本地自己搭建一个rtmp的推流服务&#xff0c;方便测试使用。 一、工具准备 Nginx&#xff1a;使用nginx-rtmp-win64推流工具FFmpeg&#xff1a;官方…

上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日震荡反弹&#xff0c;黄白二线有所分化&#xff0c;题材热点轮动表现。北证50指数大涨超3%&#…

劲松HPV防治诊疗中心提醒:做完HPV检查后,需留意这些事项!

在接受HPV检查后&#xff0c;有一些注意事项需要您注意。首先&#xff0c;要遵循医生的建议&#xff0c;并按照医生的指示进行后续治疗和随访。 其次&#xff0c;检查后可能会有些不适感&#xff0c;这是正常的现象&#xff0c;不必过于担心。但是&#xff0c;如果不适感持续加…

产品工程师工作的职责十篇(合集)

一、岗位职责的作用意义 1.可以最大限度地实现劳动用工的科学配置; 2.有效地防止因职务重叠而发生的工作扯皮现象; 3.提高内部竞争活力&#xff0c;更好地发现和使用人才; 4.组织考核的依据; 5.提高工作效率和工作质量; 6.规范操作行为; 7.减少违章行为和违章事故的发生…

9. BeanFactory 和 ApplicationContext有什么区别?

BeanFactory 和 ApplicationContext有什么区别&#xff1f; BeanFactory和ApplicationContext是Spring的两大核心接口&#xff0c;都可以当做Spring的容器。其中ApplicationContext是 BeanFactory的子接口。 依赖关系 BeanFactory&#xff1a;是Spring里面最顶层的接口&#…

2023 IDEA大会开幕 共探AI新篇章下的技术创新与创业

11月22日&#xff0c;AI与数字经济领域一年一度的科创盛会&#xff0c;2023 IDEA大会在深圳举行。IDEA研究院创院理事长、美国国家工程院外籍院士沈向洋在会上发表主旨演讲&#xff0c;发布IDEA研究院的重磅研产结晶与市场化成果&#xff1b;在大咖云集的论坛环节&#xff0c;多…

Android:Google三方库之Firebase集成详细步骤(一)

前提条件 安装最新版本的 Android Studio&#xff0c;或更新为最新版本。使用您的 Google 账号登录 Firebase请注意&#xff0c;依赖于 Google Play 服务的 Firebase SDK 要求设备或模拟器上必须安装 Google Play 服务 将Firebase添加到应用&#xff1a; 方式&#xff1a;使用…

CI/CD相关概念学习

文章目录 CI/CD相关概念学习前言CI/CD相关概念介绍集成地狱持续集成持续交付持续部署Devops CI/CD相关应用介绍JenkinsTekton PipelinesSpinnakerTravis CIGoCD CI/CD相关概念学习 前言 本文主要是介绍一些 CI/CD 相关的概念&#xff0c;通过阅读本文你将快速了解 CI/CD 是什么…

口袋参谋:只用一招,提前规避差评!请看具体操作步骤

​如何提前规避差评&#xff1f;至少99%的商家都不知道该怎么做&#xff0c;剩下的1%还是我刚教会的。 宝贝的评价直接影响宝贝转化&#xff0c;特别是新品链接。 10个好评也挽回不了一个差评对产品的致命打击&#xff0c;差评就像一个重磅炸弹&#xff0c;威力足够能让你的转…

七,vi和vim

Linux系统会内置vi文本编辑器 Vim具有程序编辑的能力&#xff0c;可以看做是Vi的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富&#xff0c;在程序员中被广泛使用。 vi和vim常用的三…

【C语言】函数(二):函数调用与链式访问

目录 函数调用传值调用传址调用练习题 嵌套调用链式访问 函数调用 函数调用分为传值调用和传址调用 传值调用 传值调用时&#xff0c;函数的形参和实参分别有着自己的内存空间&#xff0c;形参的改变不会影响实参。在上文中说到的利用一个函数实现两个整数的交换的错误写法就是…

Spring Boot中配置文件生效位置

1. 配置文件位置 首先小伙伴们要明白&#xff0c;Spring Boot 默认加载的配置文件是 application.properties 或者 application.yaml&#xff0c;properties优先级高于yaml。默认的加载位置一共有五个&#xff0c;五个位置可以分为两类&#xff1a; 从 classpath 下加载&…

css取消移动端长按元素背景色

在开发微信小程序的时候&#xff0c;发现有的元素长按之后&#xff0c;出现了讨厌人的背景色&#xff0c;这就很奇怪&#xff0c;就想把它去掉&#xff0c;所以这里教一下方法&#xff1a; 在所在元素添加css样式&#xff1a; // 取消长按的背景色-webkit-tap-highlight-color:…

【数据结构】链表的八种形态

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 链表的三大"性状" 一.带头链表和不带头链表 头指针与头结点的异同 头指针 头结点 二.循环链表和非循环链表 三.双向链表和单向链表 链表的八大形态 结语…

汇编-指针

一个变量如果包含的是另一个变量的地址&#xff0c; 则该变量就称为指针(pointer) 。指针是操作数组和数据结构的极好工具&#xff0c;因为它包含的地址在运行时是可以修改的。 .data arrayB byte 10h, 20h, 30h, 40h ptrB dword arrayB ptrB1 dword OFFSET arrayBarray…

5 个适用于 Linux 的开源日志监控和管理工具

当Linux等操作系统运行时&#xff0c;会发生许多事件和在后台运行的进程&#xff0c;以实现系统资源的高效可靠的使用。这些事件可能发生在系统软件中&#xff0c;例如 init 或 systemd 进程或用户应用程序&#xff0c;例如 Apache、MySQL、FTP 等。 为了了解系统和不同应用程序…

AIOps探索 | 应急处置中排障的降本增效方法探索(上)

文章来源&#xff1a;公众号ID-布博士&#xff08;擎创科技资深产品专家&#xff09; 哈喽~友友们大家好&#xff0c;最近运维界也是蛮热闹的&#xff0c;前有语雀多次崩溃&#xff0c;后有阿里全系产品集体故障&#xff0c;不管是哪种&#xff0c;都足够逼疯一个运维工程师。…

Java修仙记之记录一次与前端女修士论道的经历

文章开始之前&#xff0c;想跟我念一句&#xff1a;福生无量天尊&#xff0c;无量寿佛&#xff0c;阿弥陀佛 第一场论道&#xff1a;id更新之争 一个天气明朗的下午&#xff0c;前端的小美女长发姐告诉我&#xff1a;嘿&#xff0c;小后端&#xff0c;你的代码报错了 我答道&am…

LeetCode算法心得——打家劫舍(记忆化搜索)

大家好&#xff0c;我是晴天学长&#xff0c;准备开始深入动态规划啦&#xff0c;先从记忆化搜索开始&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃…