spring boot项目application.properties文件存放及使用介绍

一、方法一多环境配置文件

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

创建spring boot项目后可以同时创建多个.properties文件,只要符合它要求的格式即可

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

分别创建三个应用环境的配置和一个主配置

1、application.properties  主配置(以下是配置内容,这里的dev就是其他配置文件的标识名dev、test、prod)

# 具体使用那个配置文件的标识名称(格式:application-{profile}.properties;{profile}是变量用于自定义配置文件名称)
spring.profiles.active=dev

2、application-dev.properties  开发环境(以下是配置内容)

spring.application.name=tyh-demo-prop
# 开发环境端口
server.port=10001

3、application-test.properties  测试环境(以下是配置内容)

spring.application.name=tyh-demo-prop
# 测试环境端口
server.port=10002

4、application-prod.properties  生产环境(以下是配置内容)

spring.application.name=tyh-demo-prop
# 生产环境端口
server.port=10003

更改主配置中的spring.profiles.active=dev这个参数就可以切换不同子配置文件了

由于此方法.properties文件依然在jar中,我们修改时并不方便,而且太多信息暴露在开发中容易泄露,所以结合方法二进行使用

三、方法二jar包外部配置文件

我们在开发完成发布生产环境时往往都会修改一下配置文件的相关内容,而默认.properties配置文件会被封装到jar包中修改起来不方便,所以spring boot给了几个读取配置文件的位置,我们可以通过这个方式去从jar包外部修改配置文件

一般我们会将.properties放在resources文件夹内

spring boot会按以下顺序去寻找配置文件

1、“当前目录”的/config文件夹下

2、“当前目录”下

3、classpath的/config文件夹下

4、classpath下

以下是图例解释:

当找到配置文件后将不会再继续寻找,也就说该文件优先级以下的配置文件将不会被读取,找到即停止

“当前目录”指的是我们打成可执行jar包后,一般会用bat文件来启动,这个当前目录指的就是bat文件的目录

我们常规存放的位置就是优先级最低的位置,所以我们只需要再单独拷贝一份配置文件,放在bat的“当前目录”即可

四、配置项加密

我们的application.properties文件中会有很多敏感信息,如:数据库连接、缓存服务器连接等等,这些用户名密码都应该是外部不可见的,所以最好将其加密后存储

我们使用jasypt来进行加解密,首先先建立项目,我搭建了spring boot项目

1、添加pom.xml信息

<!-- 配置文件项加密 -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

2、在application.properties文件中增加配置项,需要jasypt来解密的密文需要用“ENC(......)”括起来

spring.application.name=tyh-demo-prop
server.port=10001
# 配置文件项加解密密码,此处注释,而放在代码中(放在代码中使加密密钥和密文分开)
#jasypt.encryptor.password=112233
# 模拟数据库连接帐号密码
spring.datasource.username=ENC(nm3F96GtUIwZUHzsP0Mp1A==)
spring.datasource.password=ENC(lmn7lAlePy1hZu505WO0xQ==)

3、程序启动类,默认jasypt的密钥是放在配置文件中但这样会导致密文和密钥都在配置文件中,所以我把密钥放在程序中

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        //设置配置文件项加密密钥(放在这里使加密密钥和密文分开)
        System.setProperty("jasypt.encryptor.password", "112233");
        SpringApplication.run(App.class, args);
    }
}

4、使用注解的方式来注入配置文件中的配置项

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class SysConfig {

    @Value("${spring.datasource.username}")
    private String dbUsername;

    @Value("${spring.datasource.password}")
    private String dbPassword;
//自己生成get set方法
}

5、编写controller及action来调用一下

import com.tyh.demo.prop.config.SysConfig;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/test")
public class TestController {

    @Autowired
    StringEncryptor encryptor;

    @ResponseBody
    @RequestMapping("/index")
    public String index() {
        return encryptor.encrypt("taiyonghai");
    }

    @Autowired
    SysConfig sysConfig;

    @ResponseBody
    @RequestMapping("/getConfig")
    public SysConfig getConfig() {
        //spring boot自动注入就会将密文解密
        return sysConfig;
    }
}

由于其使用的是PBEWithMD5AndDES加密方式,所以每次加密出来的结果都不一样,所以很适合对数据进行加密

运行后,可以看到自动解密的配置项

五、配置项注入静态static与非静态属性

我们有很多编码需求需要使用.properties文件中自定义的配置项,传统使用Properties对象来操作,类似如下代码,

这种方式太过灵活我们不想使用的配置项可能也会被提取出来,而且当我们不想使用jar包内的配置文件,而是利用优先级使用外部的,这种直接读取的方式就很不方便,所以推荐使用@Value的方式来使用

public class SysConfigUtil {
    private static Properties props;
    static {
        try {
            // TODO:读取用户配置
            Resource resource = new ClassPathResource("/application.properties");
            props = PropertiesLoaderUtils.loadProperties(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static String getProperty(String key) {
        return props == null ? null : props.getProperty(key);
    }
}

还是刚才的项目,使用@Value来注入想让程序使用的配置项,而不想让程序使用的就不注入,这样来使配置项可控

1、我们在.properties文件中增加两个自定义配置项

spring.application.name=tyh-demo-prop
server.port=10001
# 配置文件项加解密密码,此处注释,而放在代码中(放在代码中使加密密钥和密文分开)
#jasypt.encryptor.password=112233
# 模拟数据库连接帐号密码
spring.datasource.username=ENC(nm3F96GtUIwZUHzsP0Mp1A==)
spring.datasource.password=ENC(lmn7lAlePy1hZu505WO0xQ==)
# 模拟其他自定义配置项
#tyh.url.web.admin=http://www.admin.com
tyh.url.web.agent=http://www.agent.com

2、@Value注入可以给静态属性也可以给非静态属性,具体根据使用场景自行决定,如果配置项可能不存在也可以设置默认值,避免程序无法启动

@Component
public class SysConfig {

    @Value("${spring.datasource.username}")
    private String dbUsername;

    @Value("${spring.datasource.password}")
    private String dbPassword;

    /*
    非静态属性注入(注入属性)
     */
    //@Value的参数代表配置项的key,如果没有启动会报错,加上“:”为其设置默认值即可解决冒号后面的就是默认值内容,也可以直接:冒号后面空白就是空
    @Value("${tyh.url.web.admin:www.abc.com}")
    private String urlAdmin;

    //###自己创建get/set方法###

    /*
    静态属性注入(注入set()方法)
     */
    //使用@Component把当前类当作组件启动时注入该静态属性值,静态属性注入set()方法
    public static String urlAgent;
    @Value("${tyh.url.web.agent:}")
    private void setUrlAgent(String urlAgent) {
        SysConfig.urlAgent = urlAgent;
    }
}

3、使用时非静态属性使用Autowired注入,静态属性直接取值

//非静态属性注入取值(必须使用Autowired注入)
    @Autowired
    SysConfig sysConfig;

    public void test() {
        //静态属性注入取值(直接获取)
        String str = SysConfig.urlAgent;
    }

推荐使用@Value来注入配置项进行使用,便与后续接入Apollo等配置管理中心进行配置统一管理

到此这篇关于spring boot项目application.properties文件存放及使用介绍的文章就介绍到这了,更多相关spring boot application.properties文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Spring Boot中配置文件application.properties使用

    一.配置文档配置项的调用 启动后在浏览器直接输入http://localhost:18080/user/test,就直接打印出配置文件中的配置内容. 二.绑定对象bean调用 有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,这里我们建一个ConfigBean.java类,顶部需要使用注解@ConfigurationProperties(prefix = "com")来指明使用哪个 @ConfigurationProperties(prefix = &quo

  • 详解Spring Boot配置文件application.properties

    在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml . 虽然 properties 文件比较常见,但是相对于 properties 而言,yaml 更加简洁明了,而且使用的场景也更多,很多开源项目都是使用 yaml 进行配置(例如 Hexo).除了简洁,yaml 还有另外一个特点,就是 yaml 中的数据是有序的,properties 中的数据是无序的,在一些需要路径匹配的配置中,顺序就显得尤为重要(例如我们在 Spring Cloud

  • 详解spring boot 使用application.properties 进行外部配置

    application.properties大家都不陌生,我们在开发的时候,经常使用它来配置一些可以手动修改而且不用编译的变量,这样的作用在于,打成war包或者jar用于生产环境时,我们可以手动修改环境变量而不用再重新编译. spring boo默认已经配置了很多环境变量,例如,tomcat的默认端口是8080,项目的contextpath是"/"等等,可以在这里看spring boot默认的配置信息http://docs.spring.io/spring-boot/docs/curr

  • spring boot项目application.properties文件存放及使用介绍

    一.方法一多环境配置文件 我们一般都会有多个应用环境,开发环境.测试环境.生产环境,各个环境的配置会略有不同,我可以根据这个创建多份配置文件,由主配置文件来控制读取那个子配置 创建spring boot项目后可以同时创建多个.properties文件,只要符合它要求的格式即可 格式:application-{profile}.properties:{profile}是变量用于自定义配置文件名称 分别创建三个应用环境的配置和一个主配置 1.application.properties 主配置(以下

  • Spring Boot项目中实现文件上传功能的示例

    在实际项目中,文件上传是很多项目必不可少的一个功能.那么在 Spring Boot 项目中又是如何来实现文件上传功能的呢?一般来说,上传的文件可以保存到项目根目录下的某一文件夹中,但这样做显然是不太合适的.因此我们选择将文件上传到专门的文件服务器中.很多云计算厂商都提供文件存储服务.这里我选择的是阿里云的对象存储(OSS). 一.配置OSS 1. 导入SDK 首先,你需要注册阿里云的账号并开通对象存储服务.在准备工作完成之后,需要导入 JAVA 版本的 SDK,这里使用 maven 进行导入 <

  • idea将maven项目改成Spring boot项目的方法步骤

    1.添加parent父级依赖 在pom.xml文件中,要首先添加parent父级依赖 <!-- 这个parent是springboot的父级依赖, 它提供相关的starter的maven管理以及版本号管理,还有相关maven插件的公共配置 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artif

  • 使用Docker部署Spring Boot项目的实现步骤

    目录 创建一个简单的springboot项目 一.在 pom.xml 中 ,使用 Spring Boot 2.2.10 相关依赖 二.添加 web 和测试依赖 三.创建一个 DockerController,在其中有一个hello()方法,访问时返回:hello,nihao 四.启动类 使用 Docker 部署 Spring Boot 项目 一.将项目打成jar包,拷贝到服务器上,测试一下 二.看到 Spring Boot 的启动日志后表明环境配置没有问题,编辑Dockerfile文件: 三.接

  • Spring Boot项目传参校验的最佳实践指南

    目录 场景还原 神注解加持 数据异常统一拦截 总结 场景还原 简单业务场景模拟: 假如你现在在做一个成绩录入系统,你愉快地用Spring Boot框架写了一个后台接口,用于接收前台浏览器传过来的 Student对象,并插入后台数据库. 我们将传入的 Student对象定义为: public class Student { private String name; // 姓名 private Integer score; // 考试分数(满分100分) private String mobile;

  • Spring Boot项目抵御XSS攻击实战过程

    目录 前言 一.什么是XSS攻击 二.如何抵御XSS攻击 三.实现抵御XSS攻击 总结 前言 作为Web网站来说,抵御XSS攻击是必须要做的事情,这是非常常见的黑客攻击手段之一. 一.什么是XSS攻击 XSS意思是跨站脚本攻击,英文全称Cross Site Scripting,为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS. XSS攻击的手段很简单,就是通过各种手段向我们的Web网站植入JS代码.比如说普通网站的用户注册.论坛

  • 基于Flyway实现简化Spring Boot项目部署

    1.什么是 Flyway 我们在公司做开发时,由于项目需求的变化,或者前期设计缺陷,导致在后期需要修改数据库,这应该是一个比较常见的事情,如果项目还没上线,你可能把表删除了重新创建,但是如果项目已经上线了,就不能这样简单粗暴了,我们需要通过 SQL 脚本在已有数据表的基础上进行升级. 目前 Java 这块,想要对数据库的版本进行管理主要有两个工具: Flyway Liquibase 两个工具各有千秋,但是核心功能都是数据库的版本管理,这里主要来看 Flyway.就像我们使用 Git 来管理代码版

  • ssm项目改造spring boot项目完整步骤

    目录 添加依赖 添加启动类 拷贝项目代码 配置数据库连接池 添加依赖 连接池的自动配置方式 配置 Druid 连接池 集成 MyBatis 添加依赖 配置 Mapper 对象 MyBatis配置属性 事务管理 添加依赖 注解方式 配置切换代理 测试验证 集成 Web 添加依赖 修改端口 目录结构 静态资源的一些处理 前端控制器映射路径配置 集成 Thymeleaf 添加依赖 相关配置 修改模板文件 统一异常处理 框架自带方式 控制器增强器方式 添加注册多个拦截器 系统日志 为什么要用日志 Spr

随机推荐