programing

Spring Boot이 application.yml config를 로드하지 않습니다.

bestprogram 2023. 7. 16. 13:45

Spring Boot이 application.yml config를 로드하지 않습니다.

간단한 메인 앱이 있습니다.

@Configuration
    @EnableAutoConfiguration
    @ComponentScan(basePackages = "dreamteam.eho")
    @Import({EhoConfig.class})
    public class MainApp implements CommandLineRunner, ApplicationContextAware {

구성 포함:

@Configuration
@EnableConfigurationProperties({RootProperties.class})
public class EhoConfig {
}

속성:

@ConfigurationProperties("root")
public class RootProperties {
    private String name;

구성을 로드하려고 합니다.

--spring.config.location=file:///E:/.../eho-bot/props/ --spring.profiles.active=eho

경로가 정확합니다.하지만 yml이 로드되지 않았습니다.

application-eho.yml 파일:

logging:
  file: D:/java/projects/telegram-bots/eho.log
  level:
    dreamteam.eho: INFO
    org.springframework: DEBUG

root:
  name: EHO-BOT

앱이 인수로 실행되지만 모든 속성이 null입니다.로깅 속성이 적용되지 않음, out:

--spring.config.location=file:///E:.../eho-bot/props/

--spring.profiles.active=eho

--spring.output.ansi.enabled=always

다음 방법으로 시도:

다음과 같은 응용프로그램 구조를 따릅니다.

App
└── src
|    ├── main
|         ├── java
|         │     └── <base-package>
|         │               └── Application.java (having public static void main() method)
|         │
|         ├── resources
|                ├─── application-eho.yml
|
├──── pom.xml

Application.java 콘텐츠

@SpringBootApplication
@RestController
public class Application {

    public static void main(String[] args) {
        System.setProperty("spring.config.name", "application-eho");
        SpringApplication.run(Application.class, args);
    }

}

application-eho.yml 파일:

logging:
  file: D:/java/projects/telegram-bots/eho.log
  level:
    dreamteam.eho: INFO
    org.springframework: DEBUG

root:
  name: EHO-BOT

이 경우 스프링 부트를 사용해야 합니다.

    @SpringBootApplication
    public class ReTestsApplication implements CommandLineRunner {

        public static void main(String[] args) {
            SpringApplication application = new SpringApplication(ReTestsApplication.class);
            application.setWebEnvironment(false);
            application.setBannerMode(Banner.Mode.OFF);
            application.run(args);
        }

        public void run(String... args) throws Exception {

        }
    }

webEnvironmet=false 및 BannerMode=off(어플리케이션 삭제)를 사용합니다.

문서, https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-externalize-configuration 참조

을 사용하는 경우PropertySource주석을 추가할 수 없습니다.기본적으로 yml 파일 형식을 지원하지 않습니다.사용하다PropertySourceFactory하기와 같이

    public class YamlPropertySourceFactory implements PropertySourceFactory {

    @Override
    public PropertySource<?> createPropertySource(String name, EncodedResource encodedResource) 
      throws IOException {
        YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
        factory.setResources(encodedResource.getResource());

        Properties properties = factory.getObject();

        return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties);
    }
}

그런 다음 속성 원본 주석에서 동일한 내용을 다음과 같이 참조하십시오.

@PropertySource(value = "classpath:foo.yml", factory = YamlPropertySourceFactory.class)

출처: PropertySourceFactory

언급URL : https://stackoverflow.com/questions/36761956/spring-boot-doesnt-load-application-yml-config