starter propiedades how deploy context change application app java spring tomcat spring-boot

java - how - Tomcat no lee las propiedades de la aplicación Spring-Boot



spring boot tomcat configuration (4)

Soy bastante nuevo en Spring / Java y he estado revisando spring-boot para un proyecto que tengo en el trabajo. He seguido las guías y finalmente tengo una aplicación web (semi) de trabajo MVC + JPA para el acceso a los datos. Todo funciona cuando despliegue la aplicación mediante el método Jar:

java -jar build/libs/client.jar

Sin embargo, nuestra aplicación eventualmente se implementará en Tomcat (v7.0.40), así que necesito crear un archivo war del proyecto. Seguí los frascos de conversión a la guía de guerra en el sitio spring.io y me encontré con un problema. Parece que no está cargando el archivo application.properties. Aquí están los fragmentos de código importantes:

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

para completar, aquí está el 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'' }

Construyo la aplicación:

gradle clean build

Deja la guerra en tomcat, y luego agota los registros y observa lo siguiente:

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}" ... ... ...

Como dije, funciona cuando lo ejecuto a través de un jar, pero no funciona cuando lo despliegue en Tomcat. También miré dentro de $TOMCAT_HOME/webapps/client/WEB-INF/classes y veo el archivo application.properties . Entonces creo que debería estar en el classpath. Mi pregunta es, ¿por qué no está tomcat tomcat? He intentado buscar por todas partes y nadie más parece tener este problema, así que no estoy seguro si es algo que he configurado incorrectamente, o qué.

Gracias por adelantado.


Creo que para aquellos que cambian el nombre predeterminado "application. [Properties, yaml, etc]" a, por ejemplo, "service. [Properties, yaml, etc]", pueden agregar esto en la tarea build.gradle como:

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


El problema es que intenta utilizar una anotación @Value dentro de su clase @Configuration . Desde JavaDoc de @PropertySource :

Para resolver $ {...} marcadores de posición en <bean> definiciones o @Value anotaciones que usan propiedades de un PropertySource, se debe registrar un PropertySourcesPlaceholderConfigurer. Esto ocurre automáticamente cuando se usa <context: property-placeholder> en XML, pero debe registrarse explícitamente usando un método @Bean estático cuando se usan las clases @Configuration.

por ejemplo, agregue las siguientes líneas a la clase @Configuration :

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

Sin embargo, en su ejemplo, un enfoque más adecuado es mover la anotación @Configuration de la clase GreetingController (no contiene ninguna configuración) a la clase Application . Como la clase Application no contiene ninguna anotación @Value , debería funcionar sin la adición sugerida del bean PropertySourcesPlaceholderConfigurer estático.


Vine aquí buscando el mismo problema. application.properties no se carga cuando la aplicación de arranque de primavera se ejecuta como una guerra dentro de tomcat pero funcionaba bien cuando se ejecutaba con tomcat incorporado. el problema resultó ser el nombre del archivo. Yo había usado Application.properties en lugar de application.properties. cuando se ejecuta desde Tomcat, parece que distingue entre mayúsculas y minúsculas. Poniéndolo aquí para que si alguien comete el mismo error estúpido como lo hice

2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración ''file: ./ config / application.xml'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEPURACIÓN osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración ''file: ./ config / application.yml'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Archivo de configuración omitido ''file: ./ config / application.properties'' resource not found 2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se salta el archivo de configuración ''file: ./ config / application.yaml'' resource no se encontró 2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se salta archivo de configuración ''file: ./ application.xml'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEBUG osbc cConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Archivo de configuración omitido ''file: ./ application.yml'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEPURACIÓN osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Archivo de configuración omitido '' file: ./ application.properties ''resource not found 2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración'' file: ./ application.yaml ''recurso no encontrado 2015-09 -10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración ''classpath: /config/application.xml'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEPURACIÓN osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración ''classpath: /config/application.yml'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEPURACIÓN osbccConfigFileApplicationListener [Containe rBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración ''classpath: /config/application.properties'' resource no encontrado 2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omite el archivo de configuración ''classpath : /config/application.yaml ''resource not found 2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración'' classpath: /application.xml ''recurso no encontrado 2015-09- 10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina]]] Se omitió el archivo de configuración ''classpath: /application.yml'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEPURACIÓN osbccConfigFileApplicationListener [ContainerBackgroundProcessor [StandardEngine [Catalina] ]] Saltó archivo de configuración ''classpath: /application.properties'' recurso no encontrado 2015-09-10 14: 42: 13,982 DEBUG osbccConfigFileApplicationListener [ContainerBackgroundProcessor [ StandardEngine [Catalina]]] Se omitió el archivo de configuración ''classpath: /application.yaml'' recurso no encontrado