sourcetip

Tomcat이 스프링 부트 응용 프로그램 속성을 읽지 않음

fileupload 2023. 2. 9. 22:28
반응형

Tomcat이 스프링 부트 응용 프로그램 속성을 읽지 않음

저는 스프링/자바에 온 지 얼마 안 되어 직장에서 하는 프로젝트를 위해 스프링 부츠를 체크하고 있습니다.가이드를 따라다니다가 드디어 (세미)데이터 액세스용 웹 어플리케이션 MVC+JPA가 나왔습니다.Jar 방식으로 앱을 배포하면 모든 것이 작동합니다.

java -jar build/libs/client.jar

단, 어플리케이션이 Tomcat(v7.0.40)에 도입되기 때문에 프로젝트에서 워파일을 작성해야 합니다.는 spring.io 사이트의 전쟁 가이드로 변환된 항아리를 팔로우했는데 문제가 생겼습니다.application.properties 파일이 로드되지 않은 것 같습니다.다음은 중요한 코드 스니펫입니다.

src/main/java/hello/그리팅 컨트롤러:

@Controller
@Configuration
public class GreetingController {
    @Value("${app.username}")
    private String username;

    @RequestMapping("/greeting")
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        model.addAttribute("username", username);
        return "greeting";
    }
} 

src/main/java/hello/Application.자바

@ComponentScan
@EnableAutoConfiguration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

src/main/java/hello/HelloWebXml.java

public class HelloWebXml extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

src/main/main/application.properties

app.username=foo

완성도를 높이기 위해 build.gradle은 다음과 같습니다.

buildscript {
    repositories {
        maven { url "http://repo.spring.io/libs-snapshot" }
        mavenLocal()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:0.5.0.M6")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'

war {
    baseName = 'client'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/libs-snapshot" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:0.5.0.M6")
    compile("org.thymeleaf:thymeleaf-spring3:2.0.16")
    testCompile("junit:junit:4.11")
}

task wrapper(type: Wrapper) {
    gradleVersion = '1.8'
}

어플리케이션을 만듭니다.

gradle clean build

Tomcat에서 전쟁을 드롭하고 로그를 테일아웃하여 다음을 확인합니다.

SEVERE: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]
.StandardHost[localhost].StandardContext[/client]]
...
...
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating the bean
with name 'greetingController': Injection of autowired dependencies failed; nested exception
is java.lang.IllegalArgumentException: Could not resolve placeholder 'app.username' in string
value "${app.username}"
...
...
...

이미 말했듯이 jar를 통해 실행할 때는 동작하지만 Tomcat에 전개할 때는 동작하지 않습니다.도 그 속을 요.$TOMCAT_HOME/webapps/client/WEB-INF/classes '이렇게 하다'가 보이는데요.application.properties파일이에요. 그래서 수업 경로에 있어야 할 것 같아요."Tomcat" "Tomcat" "Tomcat" "Tomcat?"모든 것을 검색해 봤지만, 아무도 이 문제를 가지고 있지 않은 것 같기 때문에, 단지 내가 잘못 설정했을 뿐인지 어떤지는 잘 모르겠습니다.

잘 부탁드립니다.

다음 조언에 따르세요.http://blog.codeleak.pl/2013/11/how-to-propertysource-annotations-in.html

시험:

@PropertySources(value = {@PropertySource("classpath:application.properties")})

붐소스를 뿌려서 이긴다.

는, 「」, 「」, 「」, 「」를 입니다.@Value내の ationの @Configurationclass. @PropertySource의 JavaDoc에서 다음을 수행합니다.

${을(를) 해결하려면<bean> 정의 또는 PropertySource의 속성을 사용하는 @Value 주석의 자리 표시자}. PropertySourcesPlaceholderConfigr을 등록해야 합니다.이 문제는 XML에서 <context:property-placeholder>를 사용하는 경우 자동으로 발생하지만 @Configuration 클래스를 사용하는 경우 정적 @Bean 메서드를 사용하여 명시적으로 등록해야 합니다.

:에 다음 합니다.@Configuration 링크:

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

이 에서는 '', '보다', '보다', '보다', '보다', '이'는 '이'를 이동시키는 것이 더 .@ConfigurationGreetingController에서 class('설정로,Application수업시간. 그 이후로Application에는 래래 class class class any any any any any가 포함되어 않습니다.@Value해야 합니다.PropertySourcesPlaceholderConfigurerbean.bean.contract.

저는 같은 문제를 찾아 여기에 왔습니다.application.properties는 스프링 부트애플리케이션이 Tomcat 내부에서 전쟁 상태로 실행될 때 로드되지 않지만 내장된 Tomcat과 함께 실행할 때는 정상적으로 동작하고 있었습니다.이 문제는 파일명에 있는 것으로 판명되었습니다.Tomcat에서 실행할 때 application.properties 대신 Application.properties를 사용했습니다.대소문자를 구분하는 것처럼 보입니다.누군가 나와 같은 바보 같은 실수를 저질렀을 때 여기에 놓으십시오.

2015-09-10 14:42:13,982 DEBUG os.s.b.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'file:.config/application.xml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'file:.config/application.yml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'file:.config/application.properties' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]구성 파일 'file:.config/application'을 건너뛰었습니다.yaml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'file:./application.xml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'file:./application.yml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'file:./application.properties' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]구성 파일 'file:./application'을 건너뛰었습니다.yaml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/config/application.xml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/config/application.yml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/config/application.properties' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/config/application.yaml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/application.xml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/application.yml' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/application.properties' 리소스를 찾을 수 없습니다. 2015-09-10 14:42:13,982 DEBUG os.s.b.c.c.Config File Application Listener [컨테이너 백그라운드 프로세서 [Standard Engine [Catalina]]]건너뛴 구성 파일 'classpath:/application.yaml' 리소스를 찾을 수 없습니다.

디폴트 네이밍 '애플리케이션'을 변경하는 분들을 위해서라고 생각합니다.예를 들어 [properties, servicel, etc]를 "service"로 설정합니다.[properties, snapl 등]), 다음과 같이 build.gradle 태스크에 추가할 수 있습니다.

bootRun {
    systemProperties = [
       'spring.config.name':'service'
    ]
}

언급URL : https://stackoverflow.com/questions/20667653/tomcat-not-reading-spring-boot-application-properties

반응형