首页 > 编程语言 >Java Spring Boot 常用配置总结

Java Spring Boot 常用配置总结

时间:2023-12-06 16:23:40浏览次数:33  
标签:info Java String Spring Boot version import public desc

在涉及项目开发时,通常我们会灵活地把一些配置项集中在一起,如果你的项目不是很大的情况下,那么通过配置文件集中不失为一个很好的解决方案。

在 Spring Boot 中,我们可以方便地通过读取 appliction.properties/application.yaml 格式的配置文件,进而注入我们的项目中。

1.多环境配置

在日常开发中,我们的环境根据不同的阶段会有一定不同,总的可以分为:dev、test、prod,举个简单的例子,不同的环境中如 port 可能是不同的。

上文中提到配置文件多以 appliction.properties/application.yaml 这两种格式为主,下面分别就这两种格式对多环境的配置做个说明。

application.properties

在这种格式中,主配置文件是 application。properties,对于不同环境的配置,通常我们会命名为 application-xxx.properties,这里的 xxx 可以是 dev、test、prod 中一种,比如我们的 主配置文件(appliction.properties) 内容如下:

server.port

spring.profiles.active=dev

这样配置读取时,就会去 application-dev.properties 中读取相关的配置,其他同理。

application.yaml

熟悉 yaml 的小伙伴对其格式肯定不陌生,通常都是同级内容对齐,分级项通过另启一行,且通常需要固定的空格缩进,一般是2个空格,这里不多说,格式问题自行搜索。

我们假定主配置文件是 application。yaml,其他环境的配置文件是:application-dev.yaml/application-test.yaml/application-prod.yaml 。

这里我们看看在看看 yaml 主配置文件中怎么配置:

server:
  port: 8080
 
spring:
  profiles:
    active: dev  

2.常用配置

通常我们的配置应该包含如下选项:

  • server运行配置,如端口,ip,是否SSL,超时时间,多线程等
  • server的介绍信息配置
  • 日志配置信息,又或者日志部分单独配置
  • 数据库的配置信息
  • 缓存的配置信息

比如,我们的配置项可以是以下信息:

# server
server:
  port: 8000
  tomcat:
    threads:
      max: 10
      min-spare: 3
    uri-encoding: UTF-8

# self define
app:
  name: springDemo
  desc: a-spring-boot-app
  version: 1.0.0
  author: Alice-Knight

# logging
logging:
  file:
    name: app.log
    path: ../logs
  logback:
    rollingpolicy:
      max-file-size: 5MB
      max-history: 15
  pattern:
    dateformat: yyyy-mm-ddTHH:MM:ss.SSSXXX

# database & cache & es
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  data:
    redis:
      database: 0
      connect-timeout: 120
      port: 6379
      host: 0.0.0.0
      jedis:
        pool:
          enabled: true
          max-active: 10
          min-idle: 2
  elasticsearch:
    uris:
      - http://localhost:9200
    username: admin
    password: 123456
    connection-timeout: 120s

3.配置读取

@Value("${field}")

通过注解 @Value 解析配置中的字段,新建个控制器类,主要功能就是返回 app 的 info:

package com.example.demo;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
public class RestfulController {
    @Value("${app.version}")
    private String version;

    @Value("${app.author}")
    private String author;

    @Value("${app.desc}")
    private String desc;

    @GetMapping(value = "/appInfo")
    public Object getAppInfo() {
        Map<String, String> info = new HashMap<>();
        info.put("version", version);
        info.put("author", author);
        info.put("desc", desc);

        return info;
    }
}

测试:

image.png

从结果中可以看到,返回的响应体包含我们配置文件中的字段信息。

@Component + @ConfigurationProperties + @AutoWired

这里我们用到自动装配注解。首先实现对象类,就是一个 Bean, 然后类加上注解:

  • @Component
  • @ConfigurationProperties(prefix = "app")

其次在使用到的控制类中设置变量,加上注解 @AutoWired,具体实现如下:

AppInfo.java

package com.example.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppInfo {

    private String author;

    private String desc;

    private String version;

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
}

AppInfoController.java

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
public class AppInfoController {

    @Autowired
    private AppInfo appInfo;

    @GetMapping(value = "/v2/appInfo")
    public Object getAppInfoV2() {
        Map<String, String> info = new HashMap<>();
        info.put("version", appInfo.getVersion());
        info.put("author", appInfo.getAuthor());
        info.put("desc", appInfo.getDesc());

        return info;
    }
}

测试结果:

image.png

从结果中可以看到采用该方法也可以实现配置项的读取。

4.自定义配置

比如我们在配置文件中定义了这个 app 的name、开发者、版本号等,即如下:

...
app:
  name: demo
  author: david-knight
  version: 1.0.0
...

这个自定义的内容,我们又怎么获取呢?

先写个 Bean 来接收 app 的字段:

package com.example.springbootdemo2.param;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app")
public class AppInfo {
    private String name;

    private String desc;

    private String version;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
}

然后在 控制器类中 自动装配 Object:

package com.example.springbootdemo2.controller;

import com.example.springbootdemo2.param.AppInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;


@RestController
@RequestMapping(value = "/app")
public class AppInfoController {
    @Autowired
    private AppInfo appinfo;

    @GetMapping(value = "/info")
    public Object getAppInfo() {
        Map<String, Object> info = new HashMap<>();
        info.put("name", appinfo.getName());
        info.put("desc", appinfo.getDesc());
        info.put("version", appinfo.getVersion());
        return info;
    }

}

上面添加注解时,提示有点小问题,根据官方建议,在 pom.xml 中添加 配置依赖:

<!-- 配置处理 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

看看测试效果:

image.png

从结果中可以看到,配置项已经成功读取到。

标签:info,Java,String,Spring,Boot,version,import,public,desc
From: https://www.cnblogs.com/davis12/p/17879787.html

相关文章

  • 小白使用springboot项目进行开发系统前期工作
    首先进行项目的创建,springboot项目创建有两种方式。可以使用idea直接创建springboot项目,可以使用阿里云的源,创建会快一点这里可以选择各种的依赖第二种就是直接创建maven项目,直接导入pom坐标类似于这种,点击刷新即可点击查看代码<dependency>......
  • Java Spring Boot 参数校验及自定义校验
    在项目开发中,时常会碰到前端传递过来的请求参数需要校验,毕竟永远不要相信没有经过自己校验的数据,如果是零星几个参数,直接if...elseif...else...即可,但数据量大了,同时为了尽可能地增加复用,这里就可以用到参数校验了,如果你觉得框架提供的校验方法不够用,或者你的校验比较个性化,那......
  • java与算法Day1 Scanner的应用(一)
    java中使用输入需要用到java.util.Scanner。Scanner有next,nextInt,nextString,hasNext,hasNextLine等方法。使用XXX variable=Scanner.NextXXX就可以获取一个输入值。next系列的方法,他们的作用都是从键盘中接收数据。当程序执行到他们的时候,在命令行中就开始等待键盘输入了,而......
  • 【JavaScript高级程序设计】-3语言基础
    3.1语法.........................................................213.1.1区分大小写..................................213.1.2标识符..........................................213.1.3注释..............................................223.1.4严格模式......
  • Spring入门
    Spring框架介绍Spring是一个轻量级Java开发框架,最早有RodJohnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEEfull-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发......
  • SpringBoot项目中集成自定义公共Maven依赖如何集成与调试
    场景Nexus-在项目中使用Maven私服,Deploy到私服、上传第三方jar包、在项目中使用私服jar包:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101391279Maven项目在pom文件中引入lib下的第三方jar包并打包进去:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det......
  • kettle从入门到精通 第二十三课 kettle carte 错误(java.lang.OutOfMemoryError: GC ov
     1、Couldnotemitbufferduetolackofrequests(无法发出缓冲区,因为请求不足。)原因有两点:1)消费者处理数据能力较弱,如表输出步骤。2)消费者没有处理数据,如传递的数据中有字段type=1的数据,这种情况没有处理。解放方案:针对1)采用多线程处理和开启批量提交,如下图所示批量插入......
  • 【Java 进阶篇】Java会话技术之Cookie的存活时间
    在Web应用程序中,会话管理是一项关键的任务,用于跟踪用户的活动和保持用户状态。Cookie是会话管理的一种重要方式之一,通过Cookie可以存储有关用户的信息,但这些信息不会永久保留,而是有一个特定的存活时间。本篇博客将详细介绍Java中Cookie的存活时间,包括如何设置、修改和管理Cookie的......
  • 【Java 进阶篇】Java Session 原理及快速入门
    大家好,欢迎来到本篇博客。今天,我们将探讨JavaWeb开发中一个重要而令人兴奋的概念,即Session(会话)。Session是一种在Web应用程序中跟踪用户状态和数据的机制。我们将深入了解Session的原理,并通过示例来快速入门。什么是Session?在Web开发中,Session是一种服务器端的机制,用于跟踪用户与W......
  • java字符串String类的常用方法
    java字符串String类的常用方法字符串的创建:(1)定义字符串直接赋值,在字符串池中开辟空间()Stringstr1=“Hello”;//在字符串池中写入字符串"hello"Stringstr2=“Hello”;//直接引用字符串池中的"Hello"System.out.println(str1==str2);//地址相同,输出:true(2)使用new关键字......