当前位置: 首页 > 知识库问答 >
问题:

c3p0和hibernate用户/密码覆盖

西门梓
2023-03-14

我使用的是Spring3.2和Hibernate4.2。我有两个bean:datasource(c3p0)和带有属性文件(application.properties)的SessionFactoryBean(LocalSessionFactoryBean)。

properties -> {user=******, password=******}

'properties'属性显示

properties -> {java.runtime.name=xxx, line.separator=xxx, maven.home=xxx, ...}

和所有环境变量,但没有关于用户或密码的内容。并且它拒绝连接到数据库:

java.sql.SQLException: ORA-01017: invalid username/password; logon denied

但是在application.properties中,我会添加:

hibernate.connection.username=xxx
hibernate.connection.password=xxx

c3p0再次打印所有环境属性,但没有用户和密码,但连接成功。好吧:池可以推送到会话工厂,但是凭据必须在数据源中

那是怎么回事?我希望拥有带有凭据和池配置的数据源,以及带有hibernate配置的hibernate会话工厂。

万一有关系。下面是我的配置:

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="xxx.model" />
        <property name="hibernateProperties">
            <util:properties location="classpath:/spring/application.properties" />
        </property>
    </bean>

xml DS:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="user" value="xxx"/>
        <property name="password" value="xxx"/>
        <property name="jdbcUrl" value="xxx"/>
    </bean>

和java DS:

@Bean
public DataSource dataSource() throws PropertyVetoException {
    ComboPooledDataSource ds = new ComboPooledDataSource();
    ds.setDriverClass("oracle.jdbc.driver.OracleDriver");
    ds.setUser("xxx");
    ds.setPassword("xxx");
    ds.setJdbcUrl("xxx");
    return ds;
}

共有1个答案

袁鸿畅
2023-03-14

所以这很奇怪。

我的猜测是这样的。C3P0的DriverManagerDataSource有一个名为“properties”的属性,类型为java.util.properties。

在您的中间件领域中的某些东西被配置为自动将这样的属性设置为System.Properties。我觉得这是一件坏事,但似乎就是这样。最好的办法就是关闭这种行为。这不是一个c3p0的东西,但除此之外,我不确定你应该去哪里看。

建议您尝试在XML中显式设置properties属性[yuk]。也许这会防止它默认为系统属性。有关如何设置Properties类型的属性,请参见此处。properties属性应该包含一个名为“user”的键和一个名为“password”的键(不需要在这些属性之外设置user和password)。类似于:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="jdbcUrl" value="xxx"/>
    <property name ="properties">
       <props>
          <prop key="user">xxx</prop>
          <prop key="paswords">xxx</prop>
       </props>
    </property>
</bean>

祝你好运!

 类似资料:
  • 问题内容: 好吧,我正在尝试使用JPA + Hibernate + Spring首次配置C3P0。在persistence.xml中,我有: 但是,当我尝试初始化tomcat时,出现以下错误: 编辑1: 这是我的applicationContext.xml,如何在其中配置C3P0呢? 问题答案: 您的配置有缺陷。您正在应用程序上下文中进行配置。因此,基本上所有属性都是无用的,其次,该属性的设置破坏

  • 我有麻烦管理詹金斯的秘密密码。我希望密码不显示在日志上,但我尝试了两种方法没有成功: 第一次尝试 我尝试使用全局凭据(不受限制)设置用户和pwd,如下所示: 我执行了: 但我可以在日志中看到,用户的写入是正确的,但pwd的写入方式与它的路径相同: 在我的自动测试中,也是通过输入完整路径而不是变量的值。 第二次尝试 我试着用这样的密文: 但控制台日志上显示的是原样的密码。 有人能帮我吗? 先谢谢你。

  • 除非我真的很沮丧,否则我不会发这个帖子。我试图在一个非常简单的应用程序中用Hibernate 4.1.1配置C3P0,但是我得到了一个类未找到异常。我已经在类路径中包含了C3P0特定的jar文件。Hibernate-c3p0-3.5.2-Final.jar hibernate.properties: Stacktrace:

  • 我正在构建一个Java Web应用程序,当经理批准他们的请求时,它会自动授予用户对其Windows PC的管理权限。 为了实现这一点,我将编写一个脚本来自动远程访问用户的计算机,并将他们添加到计算机的管理组中。我想为了做到这一点,我需要一个管理服务帐户来访问所有的计算机。 我的问题是,我如何安全地存储管理服务帐户信息?应用程序每次需要访问并授予用户管理员权限时都需要凭据,那么我如何让应用程序在没有

  • 问题内容: 我是休眠的新手,已经开始使用C3P0作为休眠的连接池管理器,因为没有它,在与MySQL服务器没有联系8个小时之后,我遇到了超时问题。 切换到C3P0后,我最近遇到了死锁,我不确定它是如何发生的。我虽然显示了所有堆栈跟踪和配置。 这是配置日志 这是我设置的属性 这是被锁定的线程之一的线程转储。 由于我对此并不陌生,因此无法从日志和转储中识别问题。我还注意到C3P0创建了很多线程。 问题答