SpringBoot 설정 파일 주입 3 가지 방법 상세 설명
프로젝트 1:@ConfigurationProperties+@Component
spring bean , bean
/**
* ,
* @ConfigurationProperties: SpringBoot ;
* prefix = "person":
*
* , @ConfigurationProperties ;
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
방안 2:@Bean+@ConfigurationProperties@ConfigurationProperties 를@bean 의 주해 에 직접 정의 할 수 있 습 니 다.이것 은 bean 실체 류 이 므 로@Component 와@ConfigurationProperties 를 사용 하지 않 습 니 다.여 기 는 Boot 의 동적 데이터 원본 전환 클래스 입 니 다.
package com.topcheer.oss.base.datasource;
import com.alibaba.druid.pool.DruidDataSource;
import com.xiaoleilu.hutool.crypto.symmetric.SymmetricAlgorithm;
import com.xiaoleilu.hutool.crypto.symmetric.SymmetricCrypto;
import com.xiaoleilu.hutool.util.CharsetUtil;
import com.xiaoleilu.hutool.util.HexUtil;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UmspscDataSource extends DruidDataSource {
private static final long serialVersionUID = 4766401181052251539L;
private String passwordDis;
/**
*
*/
private final static String Pkey ="1234565437892132";
@Override
public String getPassword() {
if(passwordDis != null && passwordDis.length() > 0) {
return passwordDis;
}
String encPassword = super.getPassword();
if(null == encPassword) {
return null;
}
log.info(" ,{" + encPassword + "}");
try {
// ,
String key = HexUtil.encodeHexStr(Pkey);
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes());
passwordDis = aes.decryptStr(encPassword, CharsetUtil.CHARSET_UTF_8);
return passwordDis;
} catch (Exception e) {
log.error(" ,{"+encPassword + "}");
//log.error(LogUtil.e(e));
//throw new Exception(" !", e);
return null;
}
}
}
@Bean(name = "systemDataSource")
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "spring.datasource.system")
public DataSource systemDataSource() {
return new UmspscDataSource();
}
@Bean(name = "secondDataSource")
@ConfigurationProperties(ignoreUnknownFields = false, prefix = "spring.datasource.second")
public DataSource secondDataSource() {
return new UmspscDataSource();
}
@Bean(name="systemJdbcTemplate")
public JdbcTemplate systemJdbcTemplate(
@Qualifier("systemDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name="secondJdbcTemplate")
public JdbcTemplate secondJdbcTemplate(
@Qualifier("secondDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
프로젝트 3:@ConfigurationProperties+@EnableConfigurationProperties우 리 는 위의 예 와 같이 속성 을 설명 한 다음 에 Spring 의@Autowire 로 mail configuration bean 을 주입 합 니 다.
package com.dxz.property;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(locations = "classpath:mail.properties", ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
private String host;
private int port;
private String from;
private String username;
private String password;
private Smtp smtp;
// ... getters and setters
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 getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Smtp getSmtp() {
return smtp;
}
public void setSmtp(Smtp smtp) {
this.smtp = smtp;
}
@Override
public String toString() {
return "MailProperties [host=" + host + ", port=" + port + ", from=" + from + ", username=" + username
+ ", password=" + password + ", smtp=" + smtp + "]";
}
public static class Smtp {
private boolean auth;
private boolean starttlsEnable;
public boolean isAuth() {
return auth;
}
public void setAuth(boolean auth) {
this.auth = auth;
}
public boolean isStarttlsEnable() {
return starttlsEnable;
}
public void setStarttlsEnable(boolean starttlsEnable) {
this.starttlsEnable = starttlsEnable;
}
}
}
시작 클래스 및 테스트 클래스:
package com.dxz.property;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
@EnableConfigurationProperties(MailProperties.class)
public class TestProperty1 {
@Autowired
private MailProperties mailProperties;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
@ResponseBody
public String hello() {
System.out.println("mailProperties" + mailProperties);
return "hello world";
}
public static void main(String[] args) {
//SpringApplication.run(TestProperty1.class, args);
new SpringApplicationBuilder(TestProperty1.class).web(true).run(args);
}
}
결과:@EnableConfigurationProperties 설명 을 주의 하 십시오.이 설명 은@ConfigurationProperties 주석 설정 Bean 에 대한 지원 을 시작 하 는 데 사 용 됩 니 다.즉,@EnableConfigurationProperties 주 해 는 Spring Boot 가@ConfigurationProperties 를 지원 할 수 있 음 을 알려 줍 니 다.지정 하지 않 으 면 다음 과 같은 이상 을 볼 수 있 습 니 다:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dxz.property.MailProperties] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
주의:다른 방법 도 있 습 니 다.(Spring Boot 는 항상 다른 방법 이 있 습 니 다!)@ConfigurationProperties beans 를 C 용@Configuration 또는@Component 주석 으로 추가 하면 component scan 에서 발견 할 수 있 습 니 다.
@ConfigurationProperties
@Value
기능.
설정 파일 의 속성 을 일괄 주입 합 니 다.
하나하나 지정 하 다
느슨 한 귀속(느슨 한 문법)
지지 하 다.
지지 하지 않 음
SpEL
지지 하지 않 음
지지 하 다.
JSR 303 데이터 검증
지지 하 다.
지지 하지 않 음
복잡 유형 패키지
지지 하 다.
지지 하지 않 음
프로필 yml 이나 properties 를 설정 하면 값 을 얻 을 수 있 습 니 다.
만약 에 저 희 는 특정한 업무 논리 에서 설정 파일 의 특정한 값 을 가 져 와 야 한다 면@Value 를 사용 하 십시오.
만약 에 저희 가 javaBean 을 만들어 서 프로필 과 비 추 면@ConfigurationProperties 를 직접 사용 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.