환경변수를 사용한 스프링 부트 구성
Spring data rest를 사용하여 리소스를 제공하기 위해 DB와 상호 작용하는 Spring 부팅 애플리케이션을 가지고 있습니다.환경변수로부터 설정을 취득하고 싶다.다음은 제 속성 파일입니다.
spring.datasource.url=${mysql.url}
spring.datasource.username=${mysql.user}
spring.datasource.password=${mysql.password}
환경변수는 https://ibb.co/cyxsNc 이미지에 있습니다.
아래 구성에서도 시도했습니다.
spring.datasource.url=${MySQL_Url}
spring.datasource.username=${MySQL_User}
spring.datasource.password=${MySQL_Password}
그러나 DB에 접속할 수 없고 아래 오류가 발생합니다.
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Tomcat.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.tomcat.jdbc.pool.DataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalArgumentException: URL must start with 'jdbc'
응용 프로그램 폴더 구조
Project
|-- src/main/java
|-- com.example.app
|-- DemoApplication.java
|-- src/main/resources
|-- application.properties
주의: 다음과 같이 값을 설정하면 설정은 정상적으로 동작합니다.
spring.datasource.url=jdbc:mysql://localhost:3306/ex_man
spring.datasource.username=root
spring.datasource.password=root
제가 무엇을 빠뜨리고 있나요?
다음 문서를 참조하십시오.https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
환경 변수 이름을 지정해 보십시오.
스프링_DATASOURCE_URL
SPRING_DATASOURCE_USERNAME
스프링_DATASOURCE_PASSWORD
갱신:
스프링 부트에서 환경 변수가 올바르게 선택됩니다.아래 테스트를 참조하십시오.
package com.example.environment_vars;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import java.util.Map; // Import this for systemEnvironment
@SpringBootApplication
public class EnvironmentVarsApplication {
@Value("#{systemEnvironment['ENV_VAR'] ?: 'Default_value'}")
private String envVar;
@Bean
public CommandLineRunner commandLineRunner() {
return new CommandLineRunner() {
@Override
public void run(String[] arg0) throws Exception {
System.out.println(envVar);
}
};
}
public static void main(String[] args) {
SpringApplication.run(EnvironmentVarsApplication.class, args);
}
}
그러면 환경변수 ENV_VAR 값이 출력되고 값이 존재하지 않으면 Default_Value가 출력됩니다.
@Value프로젝트 전체에서 액세스할 수 있는 값을 삽입합니다.
DataSource 컨피규레이션파일을 사용하여 System.getEnv("ENV_VARILE") 메서드를 사용하여 환경변수를 얻을 수 있습니다.
먼저 application.properties의 "spring.datasource"로 시작하는 속성을 삭제해야 합니다.다음으로 Ready to Go 컨피규레이션파일을 포함합니다.
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
class JpaConfig {
@Bean
public DataSource getDataSource() {
return DataSourceBuilder.create()
.driverClassName("com.mysql.cj.jdbc.Driver")
.url(getDataSourceUrl())
.username(System.getenv("DB_USERNAME"))
.password(System.getenv("DB_PASSWORD"))
.build();
}
private String getDataSourceUrl() {
return "jdbc:mysql://"
+ System.getenv("DB_HOST") + "/"
+ System.getenv("DB_NAME")
+ "?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false";
}
}
언급URL : https://stackoverflow.com/questions/48892953/spring-boot-configuration-with-environment-variables
'programing' 카테고리의 다른 글
| 리액트 라우터는 상대 링크를 지원합니까? (0) | 2023.03.21 |
|---|---|
| 봄 MVC 뷰 레이어용 JSP 대체 방법 (0) | 2023.03.21 |
| 카테고리에 상위 카테고리가 있는지 확인하는 방법 (0) | 2023.03.21 |
| Angular.js 지시 동적 템플릿URL (0) | 2023.03.21 |
| @Autowired 컨스트럭터 파라미터를 개별적으로 "required=false"로 설정하는 방법 (0) | 2023.03.21 |