Tomcat 不读取 Spring-Boot 应用程序属性 [英] Tomcat Not reading Spring-Boot Application Properties
问题描述
我对 spring/java 还很陌生,并且一直在检查我正在工作的项目的 spring-boot.我一直在遵循指南,最后有一个(半)工作的 Web 应用程序 MVC + JPA 用于数据访问.当我通过 Jar 方法部署应用程序时,一切正常:
I'm fairly new to spring/java and have been checking out spring-boot for a project I have at work. I've been following guides and finally have a (semi) working web app MVC + JPA for data access. Everything works when I deploy the app via the Jar method :
java -jar build/libs/client.jar
但是,我们的应用程序最终将部署到 Tomcat (v7.0.40),因此我需要从该项目创建一个 war 文件.我遵循了将 jars 转换为战争的指南spring.io 站点并遇到了问题.它似乎没有加载 application.properties 文件.以下是重要的代码片段:
However, our application is eventually going to be deployed to Tomcat (v7.0.40) so I need to create a war file from the project. I've followed the converting jars to war's guide on the spring.io site and have run into a problem. It appears that it is not loading up the application.properties file. Here are the important code snippets:
src/main/java/hello/GreetingController:
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
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
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
src/main/resources/application.properties
app.username=foo
为了完整起见,这里是 build.gradle:
for completeness, here is the 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
把war放到tomcat里,然后把log拖出来看看:
Drop the war in tomcat, and then tail out the logs and see the following:
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 不加载它?我试过到处搜索,似乎没有其他人遇到这个问题,所以我不确定它是否只是我配置不正确的东西,还是什么.
As I said, it works when I run it via a jar, but does not work when I deploy it to Tomcat. I also looked inside $TOMCAT_HOME/webapps/client/WEB-INF/classes
and I see the application.properties
file. So I think that it should be on the classpath. My question is, why isn't tomcat loading it? I've tried searching all over and no one else seems to be having this problem so I'm not sure if its just something I have incorrectly configured, or what.
提前致谢.
推荐答案
遵循这些人的建议:http://blog.codeleak.pl/2013/11/how-to-propertysource-annotations-in.html
试试:
@PropertySources(value = {@PropertySource("classpath:application.properties")})
然后为胜利加油.
这篇关于Tomcat 不读取 Spring-Boot 应用程序属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!