- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一系列教程应用程序来了解不同的 Java EE 技术。我正在遵循各种教程并且或多或少地坚持它们。最近,我开始编写一个简单的 Spring CRUD Web 应用程序来存储、查找、修改和删除 Employee DB 表中的员工。我之前完成了另一个非常相似的应用程序,它仅使用纯 Java 和 Hibernate,并且旨在实现完全相同的功能。该应用程序工作正常,因此我决定将数据库连接设置从这个旧应用程序复制到新的 Spring 应用程序。
问题是,Spring DriverManagerDataSource bean 似乎不接受与原始 Hibernate 配置相同的属性设置,例如“hibernate.hbm2ddl.auto”,我希望在启动时方便地清除数据库,或者“defaultSchema”,Postgres 由于某种原因需要它,所以我一直在配置数据库连接。
如何让 Spring 像旧应用程序中的 Hibernate 一样接受这些属性,并表现出相同的行为?为什么 bean 不以某种可预测的、合理的方式接受这些特定属性,就像其他属性(例如“url”或“password”)一样?我是否应该设置它们,Spring 中是否有其他机制可以处理我想要的属性功能?
旧应用程序配置:
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/test2</property>
<property name="connection.username">postgres</property>
<property name="connection.password">postgres</property>
<property name="hibernate.default_schema">public</property>
<property name="show_sql">true</property>
<property name="use_sql_comments">true</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<mapping class="cz.bsc.hibernatetest.hibernatetutorial.domain.Book" />
<mapping class="cz.bsc.hibernatetest.hibernatetutorial.domain.Author" />
</session-factory>
</hibernate-configuration>
部分 Spring 配置取自教程,我尝试按上述方式进行修改:
spring-servlet.xml
<beans...>
<bean id="ds"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver"></property>
<property name="url" value="jdbc:postgresql://localhost:5432/test2"></property>
<property name="username" value="postgres"></property>
<property name="password" value="postgres"></property>
<property name="spring.jpa.hibernate.defaultSchema" value="public"></property>
<property name="spring.jpa.hibernate.show_sql" value="true"></property>
<property name="spring.jpa.hibernate.use_sql_comments" value="true"></property>
<property name="spring.jpa.hibernate.hbm2ddl.auto" value="create"></property>
</bean>
</beans>
我的应用程序在当前状态下抛出的完整错误消息。我认为它表明我正在尝试以非预期的方式设置属性,因此存在某种语法错误。
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'empController': Unsatisfied dependency expressed through field 'dao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dao' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Cannot resolve reference to bean 'jt' while setting bean property 'template'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jt' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Cannot resolve reference to bean 'ds' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ds' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'spring.jpa.hibernate.defaultSchema' of bean class [org.springframework.jdbc.datasource.DriverManagerDataSource]: Nested property in path 'spring.jpa.hibernate.defaultSchema' does not exist; nested exception is org.springframework.beans.NotReadablePropertyException: Invalid property 'spring' of bean class [org.springframework.jdbc.datasource.DriverManagerDataSource]: Bean property 'spring' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
最佳答案
Hibernate 属性不是数据源定义的一部分。它应该在 session 工厂 bean 下定义。
例如:
<beans>
<bean id="ds"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver"></property>
<property name="url" value="jdbc:postgresql://localhost:5432/test2"></property>
<property name="username" value="postgres"></property>
<property name="password" value="postgres"></property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref bean="ds" />
<property name="packagesToScan" value="db entities package name" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.defaultSchema">public</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.use_sql_comments">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
关于java - 如何设置Spring的DriverManagerDataSource的某些属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608903/
我一直在其 documentation 中阅读有关 DriverManagerDataSource 的内容。我遇到了这句话: NOTE: This class is not an actual con
我定义了一个数据源如下: @Bean public DataSource dataSource(){ DriverManagerDataSource dataSource = new Driv
我正在使用 spring 和 hibernate 独立应用程序。我正在使用以下配置。
我尝试在谷歌上查找该问题,但无法找到解决方案。 我想要实现的目标 请参阅下面的代码,我想做的是将加密密码传递给 MethodInvokingBean ,它使用 com.xxxxxxx.CryptoUt
在 Spring 中,使用 有什么区别? DriverManager 数据源 和 SimpleDriverDataSource 给定它的驱动程序类名、url、用户名和密码来创建一个新的数据源? 例如,
我们正在使用 Spring 框架(2.5 版)中的 DriverManagerDataSource 来汇集与 Oracle 的连接。然而,这些连接似乎没有定义任何超时——昨天,在紧急数据库重启后,我们
大家好,Java Geeks, 我在 MySQL 数据库中有很多存储过程,我可以从 .NET 中成功调用它们。但是,当从 Java Spring SimpleJdbcCall.execute() 调用
当我启动 SpringMVC 时收到以下异常... Apr 28, 2012 5:47:26 PM org.apache.catalina.core.ApplicationContext log SE
Spring DriverManagerDataSource 和 apache BasicDataSource 有什么区别?哪一个更可取,在什么情况下? 谢谢。 最佳答案 根据 Spring docu
好的,log4j 和 servlet 错误已得到修复。现在我有以下问题: 找不到类 [org.springframework.jdbc.datasource.DriverManagerDataSour
我正在尝试进行一些基本的数据库操作。我使用的是 STS 3.2.0、Apache Tomcat 7。 我的 dispatcher-servlet.xml 包括:
我正在开发 Maven spring mvc 应用程序。我已在 pom.xml 中添加了依赖项,并在 servlet-context.xml 中给出了引用。请引用以下内容: servlet-conte
我是 spring java 的新手 代码如下: pom.xml文件 4.0.0 com.shr app SpringDemoProject war 1.0.0-BUILD-SNAPSHOT
我正在使用 Hibernate 和 Spring 编写一个应用程序。但是我遇到了以下错误: nov. 11, 2011 10:32:11 AM org.apache.catalina.core.Apr
我有一个 Spring MVC 项目,我正在使用 NamedParameterJdbcTemplate 连接到 postgres 数据库。 当我尝试启动我的应用程序时,出现异常: Cannot con
我正在尝试使用以下代码获取 jdbc 连接。 我使用mysql数据库jpa2和spring 4。如何获得jdbc连接并从mysql数据库检索该值 import java.io.Serializ
I am working on a Spring MVC web app and trying to simply connect to an Oracle database (to select
我正在尝试使用 jdbc 模板将数据插入数据库。我在 mysql 数据库中使用数据库 frr,下面的问题是我编写的代码,但出现以下错误: Exception in thread "main" java
我目前在我的项目中使用此配置: 而且它运行良好,速度非常快。我碰巧在一个旧项目(spring 2.5)上看到了这个配置: oracle.jdbc.dri
Feb 20, 2012 6:30:45 AM org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring ro
我是一名优秀的程序员,十分优秀!