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.hqwc.cn/news/206543.html

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

相关文章

基于springboot实现“漫画之家”系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现“漫画之家”系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&am…

自学成为android framework高手需要准备哪些装备-千里马车载车机系统开发学习

背景 hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;经常有很多学员买课同学都会问到需要准备哪些装备&#xff0c;我也回答了很多学员了&#xff0c;今天就搞一篇文章来统一说明一下&#xff0c;告诉一下大家如果你想从一个framework新手变成一个framework开发的高…

【Java】实现阻塞队列-生产者/消费者模型

上文中我们讲了Java库中自带的阻塞队列&#xff0c;并且讲了如何用阻塞队列来实现生产者消费者模型 【Java】用Java库中自带的阻塞队列以及用阻塞队列实现生产者-消费者模型 下面我们来讲如何用代码实现一个阻塞队列 1、实现一个阻塞队列 阻塞队列 普通队列 线程安全 阻…

编译源码-【opencv3.4.16 + vs2013 x64】

编译机器&#xff1a;i5 13500HX RTX 4050 laptop win11 CMake 3.26.4 Configure&#xff0c;去掉勾选图中黄色标注的项&#xff0c;opencv_world 随意 Configure可能提示3rdparty下载timeout&#xff0c;它会下载到源码目录的.cache ├── .cache │ ├──ffmpeg │ │ …

易点易动设备管理系统:提升企业设备保养效率的最佳选择

在现代企业中&#xff0c;设备的正常运行和保养对于业务的顺利进行至关重要。然而&#xff0c;传统的手动设备管理方式往往效率低下、容易出错&#xff0c;给企业带来不必要的成本和风险。为了解决这一问题&#xff0c;易点易动设备管理系统应运而生。本文将介绍易点易动设备管…

【操作系统】I/O软件层次结构

文章目录 1. 前言2. I/O软件层次结构2.1 用户层软件2.2 设备独立性软件2.3 设备驱动程序2.4 中断处理程序 1. 前言 偶然看到“程序员的护城河是什么”这个话题&#xff0c;作为一个工作两年多的程序员吧&#xff0c;经常看到网上关于各种35岁危机、裁员甚至猝死之云云。最近也…

数据结构题型

选择题 2021 数据处理的单位&#xff1a;数据元素 矩阵压缩存储 2022 ①单链表头插法选择 ②矩阵压缩存储&#xff0c;行优先 ③删除链表节点的时间复杂度 ④稀疏矩阵存储 ⑤平衡二叉树时间复杂度 ⑥栈和队列的出队&#xff0c;问栈的大小至少多少 ⑦拓扑排序 ⑧参考书 360…

软件第三方测评报告可作哪些用途?

软件第三方测评报告是指由独立、中立的第三方机构对软件进行全面、客观、科学的评估和分析后所做的报告。该报告基于系统而严密的评测流程&#xff0c;通过多项指标和标准&#xff0c;对软件的性能、功能、易用性、安全性等方面进行评价&#xff0c;为用户提供一个权威、可靠的…

js读取json文件

1. 原生的两种方法 1.1 XMLHttpRequest const xhr new XMLHttpRequest(); xhr.overrideMimeType("application/json"); xhr.open(GET, data.json, true); xhr.onreadystatechange function () {if (xhr.readyState 4 && xhr.status 200) {const data …

【必读】从零开始,一步步教你安装nginx,搭建个人博客网站!

nginx搭建个人网站 Nginx是一款轻量级Web服务器、反向代理服务器以及电子邮件代理服务器&#xff0c;并且具有高并发连接处理能力和低内存消耗的特点。它也可以用于负载均衡和缓存控制等功能。 功能&#xff1a; 静态网站服务器&#xff1a;Nginx可以用来作为静态网站服务器&am…

d3dcompiler_47.dll缺失怎么修复,d3dcompiler_47.dll的作用有哪些

d3dcompiler_47.dll丢失是一种常见的电脑问题。如果你遇到了这个问题&#xff0c;不要惊慌&#xff0c;下面的方法可以帮助你解决。本文将详细介绍解决d3dcompiler_47.dll丢失问题的步骤&#xff0c;让你手把手地学会。 一.解决d3dcompiler_47.dll丢失问题的步骤 解决方法一&a…

【问题定位】通过看Mybatis源码解决系统问题

开发需求好好的&#xff0c;运维同事突然发现了一个问题&#xff0c;某个任务的详情页面加载不出来。看日志&#xff0c;系统在进行查询操作的时候抛出空指针异常。感觉是Mybatis内部异常&#xff0c;所以就跟踪源码看下Mybatis运行到哪一步报错的。 DefaultSqlSession#select…