[SPRING] Tomcat 봄 부팅 응용 프로그램 속성을 읽지 못함
SPRINGTomcat 봄 부팅 응용 프로그램 속성을 읽지 못함
나는 봄 / 자바에 상당히 익숙하며 직장에있는 프로젝트에 대한 스프링 부트를 체크하고있다. 나는 가이드를 따라 왔고 마침내 데이터 액세스를 위해 (세미) 작업 웹 응용 프로그램 MVC + JPA를 가졌습니다. Jar 메서드를 통해 앱을 배포하면 모든 것이 작동합니다.
java -jar build/libs/client.jar
그러나 우리 응용 프로그램은 결국 Tomcat (v7.0.40)에 배포되므로 프로젝트에서 war 파일을 만들어야합니다. 나는 spring.io 사이트에있는 전쟁 안내서를 개조 한 항아리를 따라 갔고 문제가 발생했습니다. application.properties 파일을로드하지 않는 것 같습니다. 중요한 코드 스 니펫은 다음과 같습니다.
src / main / java / hello / GreetingController :
@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.java
@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 / resources / 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
바람둥이에 전쟁을 버리고 로그를 꼬리와 다음을보십시오 :
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 파일이 보입니다. 그래서 나는 그것이 classpath에 있어야한다고 생각합니다. 내 질문은 왜 바람둥이가 그것을로드하지 않는가? 나는 모든 것을 조사해 보았는데 아무도이 문제를 안고있는 것 같아서 그저 내가 잘못 구성했거나 확실하지 않다.
미리 감사드립니다.
해결법
-
==============================
1.이 사람들의 조언을 따르십시오 : http://blog.codeleak.pl/2013/11/how-to-propertysource-annotations-in.html
이 사람들의 조언을 따르십시오 : http://blog.codeleak.pl/2013/11/how-to-propertysource-annotations-in.html
시험:
@PropertySources(value = {@PropertySource("classpath:application.properties")})
승리를위한 붐 소스.
-
==============================
2.문제는 @Configuration 클래스에서 @Value 주석을 사용하려고한다는 것입니다. @PropertySource의 JavaDoc에서 :
문제는 @Configuration 클래스에서 @Value 주석을 사용하려고한다는 것입니다. @PropertySource의 JavaDoc에서 :
예 : @Configuration 클래스에 다음 행을 추가하십시오.
@Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); }
그러나 귀하의 예에서, @Configuration 어노테이션을 GreetingController 클래스 (모든 구성을 포함하지 않음)에서 Application 클래스로 이동하는 것이 더 적합한 방법입니다. Application 클래스는 @Value 어노테이션을 포함하지 않으므로 정적 PropertySourcesPlaceholderConfigurer 빈을 추가하지 않고도 작동해야합니다.
-
==============================
3.나는 같은 문제를 찾고자 여기에왔다. application.properties는 봄 부팅 어플리케이션이 Tomcat 내부에서 전쟁으로 실행될 때로드되지 않지만 내장 된 Tomcat으로 실행할 때 제대로 작동했습니다. 문제는 파일 이름으로 밝혀졌습니다. application.properties 대신 Application.properties를 사용했습니다. 바람둥이에서 달릴 때 그것은 대소 문자를 구분하는 것처럼 보입니다. 누군가와 같은 어리석은 실수를 저지른 것처럼 여기에 두는 것.
나는 같은 문제를 찾고자 여기에왔다. application.properties는 봄 부팅 어플리케이션이 Tomcat 내부에서 전쟁으로 실행될 때로드되지 않지만 내장 된 Tomcat으로 실행할 때 제대로 작동했습니다. 문제는 파일 이름으로 밝혀졌습니다. application.properties 대신 Application.properties를 사용했습니다. 바람둥이에서 달릴 때 그것은 대소 문자를 구분하는 것처럼 보입니다. 누군가와 같은 어리석은 실수를 저지른 것처럼 여기에 두는 것.
-
==============================
4.예를 들어 "service. [properties, yaml, etc]"와 같이 기본 명명을 "application. [properties, yaml, etc]"로 변경하는 사람들은 build.gradle 태스크에 다음을 추가 할 수 있습니다.
예를 들어 "service. [properties, yaml, etc]"와 같이 기본 명명을 "application. [properties, yaml, etc]"로 변경하는 사람들은 build.gradle 태스크에 다음을 추가 할 수 있습니다.
bootRun { systemProperties = [ 'spring.config.name':'service' ] }
from https://stackoverflow.com/questions/20667653/tomcat-not-reading-spring-boot-application-properties by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 웹 서비스가 모든 SOAP 요청을 기록하게하려면 어떻게해야합니까? (0) | 2019.01.03 |
---|---|
[SPRING] JPA : 특정 필드 만 업데이트 (0) | 2019.01.03 |
[SPRING] Spring Rest POST Json RequestBody 지원되지 않는 콘텐츠 유형 (0) | 2019.01.03 |
[SPRING] Spring-Web의 RestTemplate에서 gzip으로 인코딩 된 응답을 구문 분석하는 방법 (0) | 2019.01.03 |
[SPRING] JSF 2, Spring Security 3.x 및 Richfaces 4 ajax 요청에 대한 세션 시간 초과시 로그인 페이지로 리디렉션 (0) | 2019.01.03 |