본문 바로가기

컴퓨터 프로그래밍/Spring

[Exception] Spring boot ".properties file" Setting Error

 

[ Error Description ]


***************************APPLICATION FAILED TO START***************************

Description:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine a suitable driver class

 

 

※ 원인 : Project build 할 때 DB 설정 파일의 경로를 찾지 못하여 발생하는 Error

 

1. [ Spring Boot 2.4 이상의 Version을 사용할 경우 ] 

 

.properties 파일을 사용할 경우 - > spring.config.import 을 사용하여 .properties  파일 경로를 지정할 수 있다. 

* application.properties 

spring.config.import=device.properties​


또는, 설정 파일이 여러개 일 경우 ,(콤마)를 사용하여 properties 파일 경로를 여러개 나열 할 수 있다.


spring.cofig.import=device.properties, other.properties

 

 

.yml 파일을 사용할 경우 -> spring.config.import 을 사용하여 .yml 설정 파일의 경로를 지정할 수 있다. 

 

*application.yml 

[ 방법 1]
spring:
	config:
          import: applicaiton.yml​
        

마찬가지로 설정 파일이 여러개 일 경우, 배열 형식으로 파일 경로를 지정할 수 있다. 

[ 방법 2 ]
spring:
	config:
          import:
            -application.yml
            -other.yml

 

 

 


 

2. [ Spring Boot 2.4이하의 Version을 사용할 경우 ] 

 

 

* .properties 파일을 사용할 경우 

 

@PropertySource 어노테이션을 사용하여 .properties 파일의 경로를 작성

-> 설정 값을 필요로 하는 bean에게 주입해줄 수 있다. 

서버마다 .properties 파일이 여러개 있을 경우에 Main 메소드에서 어떤 Database 설정 파일을 연결해줄 것인 지 
아래의 @PropertySource 어노테이션을 사용하여 작성한 database 설정 파일을 연결해주어야 한다. 

@EnableWebMvc
@SpringBootApplication
@PropertySource("classpath:/application-dev.properties")
public class EaiWorkspaceApplication {
    public static void main(String[] args) {
        SpringApplication.run(EaiWorkspaceApplication.class, args);
    }
}​



만약 추가 설정 파일이 여러개 일경우,
@PropertySources 어노테이션을 사용하여 배열로 묶은 다음 깔끔하게 정의하여 사용할 수 있다. 

@SpringBootApplication
@PropertySources({ 
        @PropertySource("classpath:/application-dev.properties"), 
        @PropertySource("classpath:/other.properties") })
public class MyApplication {
    public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); 
    } 
}​​

 

 

이외에 테스트 코드에서 특정 .properties 설정 파일을 사용해야 할 경우 

@TestPropertySource 어노테이션을 사용하여 정의할 수 있다. 
@SpringBootTest
@TestPropertySource("classpath:/device.properties")
public class DeviceTest {
    // ...
}​

 

 

* .yml 파일을 사용할 경우 

 

SpringApplicationBuilder를 사용하여 .properties 파일 경로를 정의할 수 있다. 

public class MyApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class)
            .properties("spring.config.location=classpath:/application.yml,classpath:/device-config.yml")
            .run(args);
}​



테스트 코드의 경우 @SpringBootTest 어노테이션의 properties에 동일한 값을 넘겨주어 사용할 수 있다. 

@SpringBootTest(
    properties = "spring.config.location=classpath:/application.yml,classpath:/device-config.yml"
)
public class DeviceTest {
    // ...
}

 

 

 

글 작성 참고 blog : https://seungtaek-overflow.tistory.com/28

 

[Spring Boot] 추가 설정 파일 사용하기(.properties .yml)

스프링 부트는 설정 파일 형식으로 .properties 또는 .yml(.yaml) 파일 형식으로 설정파일을 작성할 수 있다. 또한 src/main/resources 디렉토리 하위에 있는 application.properties 파일에 있는 설정 값들을 런타

seungtaek-overflow.tistory.com

 

'컴퓨터 프로그래밍 > Spring' 카테고리의 다른 글

[TEST] Mock 이란?  (0) 2024.02.08
[Spring기초] Spring 기술면접 준비 - 기초편  (0) 2023.04.21