java - 从配置文件注入(inject)属性从 Eclipse 在服务器上运行 Maven webapp

标签 java eclipse spring maven tomcat

我使用 Eclipse 和 Maven 开发一个 Spring + Hibernate webapp,在我的 pom.xml 中,我有几个具有不同属性的配置文件,我将它们注入(inject)到 .properties文件。该文件在applicationContext.xml 中用于配置Spring,当我要启动该应用程序时,我不得不将其部署在Eclipse 之外正在运行的tomcat 上。这是我的部分代码:

pom.xml :

...
<profile>
    <id>development</id>
    <properties>
        <db.driverClassName>com.mysql.jdbc.Driver</db.driverClassName>
        <db.name>mydbname</db.name>
        <db.params>?createDatabaseIfNotExist=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=utf-8</db.params>

        <hibernate.hbm2ddl.auto>update</hibernate.hbm2ddl.auto>
        <hibernate.show_sql>true</hibernate.show_sql>

        <log4j.spring.level>WARN</log4j.spring.level>
        <log4j.hibernate.level>WARN</log4j.hibernate.level>
    </properties>
</profile>
...

应用程序属性:

...
# JDBC Information
# Some properties are in my .m2/settings.xml
jdbc.driver.classname=${db.driverClassName}
jdbc.url=${db.url}/${db.name}${db.params}
jdbc.user=${db.username}
jdbc.pass=${db.password}
...

applicationContext.xml :

...
<!-- JDBC Data Source -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver.classname}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.user}" />
    <property name="password" value="${jdbc.pass}" />
</bean>
...

使用 Tomcat7 Maven 插件,通过 mvn tomcat7:deploy 部署工作正常,但是当我选择 “Right-click > Run as > Run on server” 时,我得到很多与占位符相关的异常:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'db.driverClassName' in string value "${db.driverClassName}"
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:173)
    at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:161)
    at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:125)
    at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:180)
    at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:145)
    at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:167)
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveStringValue(BeanDefinitionVisitor.java:282)
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.resolveValue(BeanDefinitionVisitor.java:204)
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitPropertyValues(BeanDefinitionVisitor.java:141)
    at org.springframework.beans.factory.config.BeanDefinitionVisitor.visitBeanDefinition(BeanDefinitionVisitor.java:82)
    at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:206)
    ... 17 more

如何在 Eclipse 嵌入式 Tomcat 中运行我的项目并在控制台而不是在 logs/catalina.out 中获取日志?

感谢您的帮助。

最佳答案

找到了!

当我使用 Maven Eclipse 插件时,我在项目属性下有一个“Maven”条目 (Project > Properties > Maven)。我只需要激活“开发”配置文件就可以了!

Project Properties

关于java - 从配置文件注入(inject)属性从 Eclipse 在服务器上运行 Maven webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23220630/

相关文章:

java - 实时视频源的 3d 重建

java - CascadeType.REFRESH 实际上做了什么?

外部 .jar 文件的 Android Eclipse NoClassDefFoundError

android - 如何在 Eclipse 中加快将外部 jar 打包成 apk 的速度?

java - 使用 ActiveMQ 创建持久主题和订阅者 spring boot jms

java - 休息 Controller 未在 Spring Boot 中映射

java - 如何在hypersql数据库(HSQLDB)中设置Rank函数

Java URI 类文件位置

java - 如何在 Web 应用程序项目的 Controller 中将字符串作为 JSON 对象返回

java - 为什么我会收到空​​指针异常?