SpringBoot는 속성과 YAML의 두 가지 구성 방법을 지원합니다. 둘 다 비슷한 기능을 가지고 있으며 SpringBoot의 구성을 완료 할 수 있지만 Properties의 우선 순위는 YAML보다 높습니다 (YAML 언어 파일에는 ".yml"이 접미사로 추가됨).
application.yml 파일을 사용하여 SpringBoot 프로젝트를 구성하십시오. 주로 SpringBoot 프로젝트의 포트 번호, 제한 시간, 매개 변수 값 등을 구성합니다. YAML 파일의 장점은 한 눈에 알 수있는 트리 구조를 사용한다는 것입니다. 다음과 같이 :
server:
port: 8080
servlet:
session:
timeout: 30M
tomcat:
uri-encoding: UTF-8
userinfo:
user-id: 1
user-name: pan_junbiao的博客
blog-url: https://blog.csdn.net/pan_junbiao
hobbys: -[篮球,足球,羽毛球,乒乓球,游泳]
blog-remark: 您好,欢迎访问 pan_junbiao的博客
다음은 SpringBoot 프로젝트의 YAML 구성 파일에서 얻은 사용자 정의 속성 값을 소개합니다.
1. 방법 1 : @Value 주석 사용
예 : com.pjb.properties 패키지를 만들고 UserProperties 클래스 (사용자 구성 정보 클래스)를 만들고 @Value 주석을 사용하여 구성 파일의 내용을 삽입하여 구성 파일의 정보를로드합니다.
package com.pjb.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* 用户配置信息类
* @author pan_junbiao
**/
@Component
public class UserProperties
{
/**
* 用户编号
*/
@Value("${userinfo.user-id}")
private int userId;
/**
* 用户名称
*/
@Value("${userinfo.user-name}")
private String userName;
/**
* 博客地址
*/
@Value("${userinfo.blog-url}")
private String blogUrl;
/**
* 兴趣爱好
*/
@Value("${userinfo.hobbys}")
private String[] hobbys;
/**
* 备注信息
*/
@Value("${userinfo.blog-remark}")
private String blogRemark;
//省略getter与setter方法...
}
사용자 YAML 구성 정보를 얻기위한 테스트 메소드를 작성하십시오.
import com.pjb.properties.UserProperties;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
/**
* 用户配置测试类
* @author pan_junbiao
**/
@SpringBootTest
public class UserTest
{
@Autowired
private UserProperties userProperties;
/**
* 获取用户YAML配置信息
* @author pan_junbiao
*/
@Test
public void getUserProperties()
{
System.out.println("获取application.yml配置文件中的信息:");
System.out.println("用户编号:" + userProperties.getUserId());
System.out.println("用户名称:" + userProperties.getUserName());
System.out.println("博客地址:" + userProperties.getBlogUrl());
System.out.println("兴趣爱好:共" + userProperties.getHobbys().length + "个," + Arrays.toString(userProperties.getHobbys()));
System.out.println("备注信息:" + userProperties.getBlogRemark());
}
}
결과 :
2. 방법 2 : @ConfigurationProperties 주석 사용
예 : UserProperties 클래스 (사용자 구성 정보 클래스)를 수정하고 @ConfigurationProperties 주석을 사용하여 구성 파일 정보를로드하기 위해 구성 파일에서 "userinfo"접두사가 붙은 구성 항목의 값을 처리합니다.
package com.pjb.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 用户配置信息类
* @author pan_junbiao
**/
@Component
@ConfigurationProperties(prefix = "userinfo")
public class UserProperties
{
/**
* 用户编号
*/
private int userId;
/**
* 用户名称
*/
private String userName;
/**
* 博客地址
*/
private String blogUrl;
/**
* 兴趣爱好
*/
private String[] hobbys;
/**
* 备注信息
*/
private String blogRemark;
//省略getter与setter方法...
}
코드 설명 :
@Component 주석 :이 클래스가 Spring 관리 클래스임을 선언하십시오.
@ConfigurationProperties 주석 : 유사한 구성 정보를 엔티티 클래스로 자동으로 캡슐화합니다. 속성 접두사는 구성 파일에 정의 된 "userinfo"와 같이 구성 파일에있는 구성 항목의 접두사를 나타냅니다.
@Bean 어노테이션에서 직접 @ConfigurationProperties 어노테이션을 정의 할 수도 있는데, 이때 Bean 엔티티 클래스는 @Component 어노테이션과 @ConfigurationProperties 어노테이션이 필요하지 않으며 다음 코드와 같이 호출시 여전히 호출됩니다. :
@Bean
@ConfigurationProperties(prefix = "userinfo")
public UserInfo userInfo()
{
return new UserInfo();
}
결과 :
3. 방법 3 : 매개 변수 형식 사용
예 : RedisConfig.java 파일을 생성하여 application.yml 파일의 구성 정보를 읽습니다.
/**
* Redis配置类
* @author pan_junbiao
**/
@Configuration
public class RedisConfig
{
/**
* Jedis连接池
*/
@Bean("jedis.pool")
@Autowired
public JedisPool jedisPool(@Qualifier("jedis.pool.config") JedisPoolConfig config,
@Value("${spring.redis.host}") String host,
@Value("${spring.redis.port}") int port)
{
return new JedisPool(config, host, port);
}
/**
* Jedis连接池配置信息
*/
@Bean(name = "jedis.pool.config")
public JedisPoolConfig jedisPoolConfig(@Value("${spring.redis.jedis.pool.max-active}") int maxActive,
@Value("${spring.redis.jedis.pool.max-wait}") Duration maxWait,
@Value("${spring.redis.jedis.pool.max-idle}") int maxIdle,
@Value("${spring.redis.jedis.pool.min-idle}") int minIdle)
{
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//连接池最大连接数(使用负值表示没有限制)
jedisPoolConfig.setMaxTotal(maxActive);
//连接池最大阻塞等待时间(使用负值表示没有限制)
jedisPoolConfig.setMaxWaitMillis(maxWait.toMillis());
//连接池中的最大空闲连接
jedisPoolConfig.setMaxIdle(maxIdle);
//连接池中的最小空闲连接
jedisPoolConfig.setMinIdle(minIdle);
return jedisPoolConfig;
}
}
4. 포괄적 인 예
예 : application.yml 구성 파일에서 Redis 정보를 구성하고 RedisConfig.java 클래스 (Redis 구성 클래스)를 생성하고 Redis 서비스를 초기화합니다.
(1) application.yml 구성 파일에서 Redis 정보를 구성합니다.
spring:
redis:
database: 0 #Redis数据库索引(默认为0)
host: 127.0.0.1 #Redis服务器地址
port: 6379 #Redis服务器连接端口
password: #Redis服务器连接密码(默认为空)
jedis:
pool:
max-active: 8 #连接池最大连接数(使用负值表示没有限制)
max-wait: -1s #连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 #连接池中的最大空闲连接
min-idle: 0 #连接池中的最小空闲连接
lettuce:
shutdown-timeout: 100ms #关闭超时时间,默认值100ms
(2) RedisProperties.java (Redis 구성 속성 클래스)를 생성하고 @Value 주석을 사용하여 구성 파일의 내용을 주입하여 구성 파일의 정보를로드합니다.
package com.pjb.ems.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.time.Duration;
/**
* Redis配置属性类
* @author pan_junbiao
**/
@Component
public class RedisProperties
{
/**
* Redis数据库索引
*/
@Value("${spring.redis.database}")
private int database;
/**
* Redis服务器地址
*/
@Value("${spring.redis.host}")
private String host;
/**
* Redis服务器连接端口
*/
@Value("${spring.redis.port}")
private int port;
/**
* Redis服务器连接密码
*/
@Value("${spring.redis.port}")
private String password;
/**
* 连接池最大连接数
*/
@Value("${spring.redis.jedis.pool.max-active}")
private int maxActive;
/**
* 连接池最大连接数
*/
@Value("${spring.redis.jedis.pool.max-wait}")
private Duration maxWait;
/**
* 连接池中的最大空闲连接
*/
@Value("${spring.redis.jedis.pool.max-idle}")
private int maxIdle;
/**
* 连接池中的最小空闲连接
*/
@Value("${spring.redis.jedis.pool.min-idle}")
private int minIdle;
public int getDatabase()
{
return database;
}
public void setDatabase(int database)
{
this.database = database;
}
public String getHost()
{
return host;
}
public void setHost(String host)
{
this.host = host;
}
public int getPort()
{
return port;
}
public void setPort(int port)
{
this.port = port;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public int getMaxActive()
{
return maxActive;
}
public void setMaxActive(int maxActive)
{
this.maxActive = maxActive;
}
public Duration getMaxWait()
{
return maxWait;
}
public void setMaxWait(Duration maxWait)
{
this.maxWait = maxWait;
}
public int getMaxIdle()
{
return maxIdle;
}
public void setMaxIdle(int maxIdle)
{
this.maxIdle = maxIdle;
}
public int getMinIdle()
{
return minIdle;
}
public void setMinIdle(int minIdle)
{
this.minIdle = minIdle;
}
}
(3) RedisConfig.java 클래스 (Redis 구성 클래스)를 생성하고 Redis 서비스를 초기화합니다.
/**
* Redis配置类
* @author pan_junbiao
**/
@Configuration
public class RedisConfig
{
@Autowired
private RedisProperties redisProperties;
/**
* Jedis连接池
*/
@Bean("jedis.pool")
@Autowired
public JedisPool jedisPool(@Qualifier("jedis.pool.config") JedisPoolConfig config)
{
return new JedisPool(config, redisProperties.getHost(), redisProperties.getPort());
}
/**
* Jedis连接池配置信息
*/
@Bean(name = "jedis.pool.config")
public JedisPoolConfig jedisPoolConfig()
{
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//连接池最大连接数(使用负值表示没有限制)
jedisPoolConfig.setMaxTotal(redisProperties.getMaxActive());
//连接池最大阻塞等待时间(使用负值表示没有限制)
jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWait().toMillis());
//连接池中的最大空闲连接
jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
//连接池中的最小空闲连接
jedisPoolConfig.setMinIdle(redisProperties.getMinIdle());
return jedisPoolConfig;
}
}