Spring dataSource bean定义失败
我正在尝试使用Spring的JdbcTemplate来简化在Tomcat中部署并连接到Postgres的Java Web服务中的DAO。
我正在关注Spring的文档 ,我正在尝试在应用程序上下文文件中配置DataSource,如下所示:
我在适当的位置有以下db.properties
文件:
driverClassName=org.postgresql.Driver url=jdbc:postgresql://pgprod.ecnext.com:5432/manta username=my_user_name password=my_password
当我尝试部署时,我在catalina.out
找到以下堆栈跟踪:
SEVERE: Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'dataSource' defined in ServletContext resource [/WEB-INF/context.xml]: Could not resolve placeholder 'driverClassName' at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:209) at org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(PropertyPlaceholderConfigurer.java:220) at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:84) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:656) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4765) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5260) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:866) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:842) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) at java.util.concurrent.FutureTask.run(FutureTask.java:166) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:679)
不是问题的事情:
-
db.properties
文件位于正确的位置。 -
db.properties
中的凭据是正确的,可以手动读取以连接到数据库。 - ContextLoaderListener正在找到
context.xml
文件,我可以注入其他依赖项。
我非常感谢有关可能导致这种情况的任何建议。 我使用的是Spring 3.1.1和Tomcat 7.0.26。
您可能在项目中有多个
,每个都创建了一个底层对象的新实例,并且是一个痛苦的通道……
我更喜欢使用以下声明来加载属性文件:
classpath:db-config.properties
从您的位置删除前导斜杠(即location="WEB-INF/db.properties"
)或更好地将其更改为类路径:
location="classpath:db.properties"
use org.springframework.jdbc.datasource.DriverManagerDataSource
代替org.apache.commons.dbcp.BasicDataSource
在应用程序上下文中使用ignore-unresolvable =“true” 。 默认值为’fales’,您需要将其设置为“true”,因此将密钥传递给尚未访问过的上下文中的任何其他密钥。
确保你有正确的maven依赖关系,你的项目中应该存在Sping-core和Spring-context依赖关系。
org.springframework spring-core org.springframework spring-context
- 如何在spring中覆盖JndiObjectFactoryBean并在java中设置解密密码
- java.lang.AbstractMethodError:com.mysql.jdbc.Connection.isValid(I)Z
- spring – 如何自动连接数据源?
- 我应该在应用程序或应用程序服务器中定义数据源吗?
- 在Spring Batch中使用多个DataSource
- MyBatis-guice 3.3 +多个数据源+属性+ scriptrunner
- 如何将PostgreSQL数据源添加到WildFly 9.0?
- 如何从Web容器外部查找JNDI数据源?
- java.lang.ClassNotFoundException:com.microsoft.jdbc.sqlserver.SQLServerDriver:我加载了正确的驱动程序吗?