当前位置: 首页 > 面试题库 >

Tomcat不读取Spring-Boot应用程序属性

堵泽宇
2023-03-14
问题内容

我对spring / java相当陌生,并且一直在为我正在工作的项目检查spring-
boot。我一直在遵循指南,最后有一个(半)运行中的Web应用程序MVC + JPA用于数据访问。当我通过Jar方法部署应用程序时,一切正常:

java -jar build/libs/client.jar

但是,我们的应用程序最终将部署到Tomcat(v7.0.40),因此我需要从项目中创建一个war文件。我已经在spring.io网站上遵循了将jars转换为war的指南,并遇到了问题。看来它没有加载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

将战争放到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/classesapplication.properties文件。因此,我认为它应该在类路径上。我的问题是,为什么tomcat不加载它?我尝试遍历所有内容,但似乎没有其他人遇到此问题,因此我不确定是否只是我配置不正确的内容或什么。

提前致谢。


问题答案:

遵循这些人的建议:http : //blog.codeleak.pl/2013/11/how-to-propertysource-
annotations-in.html

尝试:

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

然后用酱油取胜。



 类似资料:
  • src/main/resources/application.properti 为了完整起见,这里是build.gradle: 我构建应用程序:

  • 我正在开发一个Spring Boot应用程序,我使用application.properties配置db连接、服务器端口等。 例如,如何在application.properties中实现以下XML配置

  • 我在将spring boot应用程序部署到tomcat时遇到了问题,尽管在IDE中工作得很好。我按照https://docs.spring.io/spring-boot/docs/current/reference/html/howto-tegratic-deployment.html中的说明进行了操作 更详细的结构: mvn clear包给出错误:

  • 我正在尝试在Tomcat服务器上部署SpringBoot2应用程序。我已经完成了在多个文档中发现的3个步骤,分别是: 从SpringBootServletilizer扩展 我遇到的问题是,似乎没有使用放置在上的文件(如果我以独立的方式运行应用程序,该文件会起作用)。无论我在,应用程序始终尝试从http://localhost:8888 17:35:54.193[localhost-starStop

  • 我正在学习Spring boot application,并且有使用xml和java配置的Spring应用程序的经验。 我使用的应用程序具有包含UI、服务和DAO的代码基体系结构。所有这些组件都有单独的上下文文件,即。web-applicationcontext.xml或application-servlet-context.xml、service-context.xml和data-context

  • 我有一个spring boot项目,当我从2015.3 IDE运行它时,它编译并运行良好,但从2016.1运行时,它在启动时崩溃,但这是因为配置似乎被破坏了。我的发现如下: 似乎从ide中可以看到应用程序。属性文件不受尊重,我可以在应用程序日志中看到未设置配置文件,而在上述文件中实际设置了活动配置文件。 我可以毫无问题地重建项目。 如果从命令行调用,编译后的jar可以工作。 应用程序。属性位于sr